解讀jdk動態(tài)代理為什么必須實現(xiàn)接口
使用jdk生成代理類
通過jdk實現(xiàn)的動態(tài)代理會使用Proxy的newProxyInstance方法:

寫一個類實現(xiàn)InvocationHandler,內(nèi)部要注入對應(yīng)原代理類的實現(xiàn):

測試代碼:
TestServiceImpl testService = new TestServiceImpl();
TestServiceImplHandler testServiceImplHandler = new TestServiceImplHandler(testService);
TestService testServiceProxy = (TestService)Proxy.newProxyInstance(testService.getClass().getClassLoader(), testService.getClass().getInterfaces(), testServiceImplHandler);
testServiceProxy.test();
看到生成的代理類父類是Proxy類,通過jdk代理生成的類都繼承Proxy類:
因為Java是單繼承的,而代理類又必須繼承自Proxy類,所以通過jdk代理的類必須實現(xiàn)接口。
生成代理的字節(jié)碼
還可以通過生成代理類的字節(jié)碼查看,
package java.lang.reflect;包的Proxy類

通過將生成一半的代理類寫到文件里面去:

生成的文件:

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisPlus關(guān)聯(lián)查詢的完美實現(xiàn)方案
我們在項目開發(fā)的時候,難免會遇到連表查詢的操作,所以下面這篇文章主要給大家介紹了關(guān)于MybatisPlus關(guān)聯(lián)查詢的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
MyBatis-Plus通用枚舉自動關(guān)聯(lián)注入的實現(xiàn)
本文主要介紹了MyBatis-Plus通用枚舉自動關(guān)聯(lián)注入的實現(xiàn),解決了繁瑣的配置,讓 mybatis 優(yōu)雅的使用枚舉屬性,感興趣的可以一起來了解一下2021-06-06
java通過DelayQueue實現(xiàn)延時任務(wù)
本文主要介紹了java通過DelayQueue實現(xiàn)延時任務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
java 靜態(tài)代理 動態(tài)代理深入學(xué)習(xí)
代理模式是常用的java設(shè)計模式,特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等,需要的朋友可以參考下2012-11-11
Java兩種方法計算出階乘尾部連續(xù)0的個數(shù)
這篇文章主要介紹了Java兩種方法計算出階乘尾部連續(xù)0的個數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

