代理

  1. 靜態(tài)編譯:AspectJ,生成的是class文件,class文件的類名和原來(lái)的類名是相同的。
  2. 動(dòng)態(tài)生成:JDK(如果有兩個(gè)接口不是public且包不相同,則拋異常)和cglib

JDK動(dòng)態(tài)代理

  1. 如果有一個(gè)接口不是public,代理類就不是public,如果兩個(gè)接口都不是public而且包名不同,則拋異常。
  2. 代理類繼承了Proxy方法。
  3. 下面是生成代理類的核心,ProxyGenerator方法的這個(gè)類是public。
    byte[] proxyClassFile = ProxyGenerator.generateProxyClass(proxyName, interfaces, accessFlags);
    protected Proxy(InvocationHandler h):構(gòu)造函數(shù),用于給內(nèi)部的h賦值。

static Class getProxyClass (ClassLoaderloader, Class[] interfaces):獲得一個(gè)代理類,其中l(wèi)oader是類裝載器,interfaces是真實(shí)類所擁有的全部接口的數(shù)組。

static Object newProxyInstance(ClassLoaderloader, Class[] interfaces, InvocationHandler h):返回代理類的一個(gè)實(shí)例,返回后的代理類可以當(dāng)作被代理類使用(可使用被代理類的在Subject接口中聲明過(guò)的方法)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容