最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在AOP中Spring生成代理類的兩種方式

 更新時間:2019年01月08日 14:23:09   作者:李燦輝  
今天小編就為大家分享一篇關(guān)于在AOP中Spring生成代理類的兩種方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

Java 動態(tài)代理。具體有如下四步驟:

  • 通過實現(xiàn) InvocationHandler 接口創(chuàng)建自己的調(diào)用處理器;
  • 通過為 Proxy 類指定 ClassLoader 對象和一組 interface 來創(chuàng)建動態(tài)代理類;
  • 通過反射機制獲得動態(tài)代理類的構(gòu)造函數(shù),其唯一參數(shù)類型是調(diào)用處理器接口類型;
  • 通過構(gòu)造函數(shù)創(chuàng)建動態(tài)代理類實例,構(gòu)造時調(diào)用處理器對象作為參數(shù)被傳入。

在AOP中,Spring通過生成代理類,來完成切面的織入。

Spring生成代理類有2種方式。

如果目標(biāo)對象實現(xiàn)的是一個接口,Spring會使用JDK的java.lang.relect.Proxy類,它允許Spring動態(tài)生成一個新接口,來實現(xiàn)必要的接口,織入任何通知,并且把對這些接口的任何調(diào)用轉(zhuǎn)發(fā)到目標(biāo)類。

如果目標(biāo)類沒有實現(xiàn)一個接口,Spring就使用CGLIB庫生成目標(biāo)類的一個子類,在創(chuàng)建這個子類時,Spring織入通知,并且把對這個子類的調(diào)用轉(zhuǎn)發(fā)到目標(biāo)類。在使用這種方式時需要注意一點,被標(biāo)記為final的方法不能被通知,因為Spring創(chuàng)建的子類無法重寫父類的final的方法。

原理區(qū)別:

java動態(tài)代理是利用反射機制生成一個實現(xiàn)代理接口的匿名類,在調(diào)用具體方法前調(diào)用InvokeHandler來處理。而cglib動態(tài)代理是利用asm開源包,對代理對象類的class文件加載進(jìn)來,通過修改其字節(jié)碼生成子類來處理。

  • 1、如果目標(biāo)對象實現(xiàn)了接口,默認(rèn)情況下會采用JDK的動態(tài)代理實現(xiàn)AOP
  • 2、如果目標(biāo)對象實現(xiàn)了接口,可以強制使用CGLIB實現(xiàn)AOP
  • 3、如果目標(biāo)對象沒有實現(xiàn)了接口,必須采用CGLIB庫,spring會自動在JDK動態(tài)代理和CGLIB之間轉(zhuǎn)換

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

最新評論

垣曲县| 高尔夫| 博爱县| 仁布县| 宾川县| 中方县| 宜良县| 康定县| 南乐县| 宿松县| 乃东县| 剑阁县| 绥中县| 黄浦区| 新丰县| 阳山县| 抚远县| 绥德县| 龙州县| 鹿邑县| 锡林郭勒盟| 蛟河市| 昌乐县| 宁陕县| 凤城市| 新丰县| 丽水市| 黑水县| 陕西省| 萨嘎县| 青河县| 平遥县| 来宾市| 吉木乃县| 化隆| 云南省| 伊通| 香河县| 五常市| 滦平县| 泸溪县|