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

寫一個(gè)類實(shí)現(xiàn)InvocationHandler,內(nèi)部要注入對應(yīng)原代理類的實(shí)現(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類:
因?yàn)镴ava是單繼承的,而代理類又必須繼承自Proxy類,所以通過jdk代理的類必須實(shí)現(xiàn)接口。
生成代理的字節(jié)碼
還可以通過生成代理類的字節(jié)碼查看,
package java.lang.reflect;包的Proxy類

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

生成的文件:

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

