(11)純手寫JDK動態(tài)代理

概要:1動態(tài)代理(過程 角色 Proxy0)? ? 2手寫(InvocationHandler 、2Handler實現(xiàn)、3類加載器、4MyProxy)

一、動態(tài)代理

1、過程

1)Proxy通過傳遞給它的參數(shù)(interfaces/invocationHandler生成代理類$Proxy0;

2)Proxy通過傳遞給它的參數(shù)(ClassLoader)來加載生成代理類$Proxy0字節(jié)碼文件

2、角色

1業(yè)務(wù)接口Interface、2業(yè)務(wù)實現(xiàn)類target、3業(yè)務(wù)處理類Handler、4JVM在內(nèi)存中生成的動態(tài)代理類$Proxy0

1業(yè)務(wù)接口
2業(yè)務(wù)實現(xiàn)類target
3業(yè)務(wù)處理類Handler

3、$Proxy0

1)實現(xiàn)業(yè)務(wù)接口(Man),客戶端可調(diào)接口方法

2)繼承Proxy,通過構(gòu)造方法將業(yè)務(wù)處理類傳入給父類Proxy進行初始化。(Proxy中存在protected InvocationHandler h;)

最終回調(diào)Handler的invoke完成調(diào)用

二、手寫動態(tài)代理

1InvocationHandler 、2Handler實現(xiàn)、3類加載器、4MyProxy

1、自定義InvocationHandler:

2、實現(xiàn)MyInvocationHandler的業(yè)務(wù)處理Handler:

3、自定義類加載器MyClassLoader:

自己在內(nèi)存中生成動態(tài)代理類,加載

重寫findClass,為在指定路徑下加載指定字節(jié)碼文件:

4、自定義MyProxy(當于JDK的Proxy):

1)根據(jù)interfaces接口構(gòu)造動態(tài)代理類需要方法(利用反射獲?。?/p>

2)動態(tài)生成代理類(.java)進行編譯,生成字節(jié)碼文件(.class),加載

3)實例化構(gòu)造方法(反射機制),初始化業(yè)務(wù)Hanlder

5其他

1)MyProxy的其他方法 編譯:

2)getMethodString方法

3)運行結(jié)果

4)生成的$MyProxy0:

http://m.itdecent.cn/p/58759fef38b8

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

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

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