解讀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)文章
Java的中l(wèi)ombok下的@Builder注解用法詳解
這篇文章主要介紹了Java的中l(wèi)ombok下的@Builder注解用法詳解,lombok注解在java進(jìn)行編譯時進(jìn)行代碼的構(gòu)建,對于java對象的創(chuàng)建工作它可以更優(yōu)雅,不需要寫多余的重復(fù)的代碼,在出現(xiàn)lombok之后,對象的創(chuàng)建工作更提供Builder方法,需要的朋友可以參考下2023-11-11
springboot?vue項目管理前后端實現(xiàn)編輯功能
這篇文章主要為大家介紹了springboot?vue項目管理前后端實現(xiàn)編輯功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Gradle構(gòu)建基本的Web項目結(jié)構(gòu)
這篇文章主要為大家介紹了Gradle創(chuàng)建Web項目基本的框架結(jié)構(gòu)搭建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03

