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

動(dòng)態(tài)代理是指系統(tǒng)根據(jù)要代理的接口,自動(dòng)幫我們生成并編譯和加載代理類,并將代理類中的代理邏輯抽象到 InvocationHandler 的invoke方法中,由開發(fā)者實(shí)現(xiàn)。在靜態(tài)代理中,我們需要自己實(shí)現(xiàn)代理類,將代理邏輯也寫在代理類里面。而動(dòng)態(tài)代理省去了我們自己寫代理類的工作,系統(tǒng)只需要知道要代理的接口,然后利用反射獲取接口的方法信息,生成代理類,代理類其實(shí)只是些模板代碼,而又為了能定制代理邏輯,系統(tǒng)便定義了一個(gè) InvocationHandler,生成的代理類中的方法都會(huì)調(diào)用 InvocationHandler 中的invoke方法,并將代理類對(duì)象,接口的方法對(duì)象,方法參數(shù)傳入。所以真正的代理邏輯在 InvocationHandler 類中。

本質(zhì):就是將原來自己編寫的代理類(靜態(tài)代理)轉(zhuǎn)化給系統(tǒng)幫我們自動(dòng)生成。

接口:

目標(biāo)對(duì)象:必須實(shí)現(xiàn)上面接口

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


注意:通過實(shí)現(xiàn)InvocationHandler 接口在invoke方法編寫自己本身需要實(shí)現(xiàn)的業(yè)務(wù)邏輯。

而invoke方法在生成的代理對(duì)象調(diào)用自己方法時(shí)觸發(fā)運(yùn)行。

使用Proxy.newProxyInstance(

car.getClass().getClassLoader(),//此處的car對(duì)象必須是接口類型

car.getClass().getInterfaces(),//此處的car對(duì)象必須是接口類型

this);獲取生成的代理對(duì)象。

測試:

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

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

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