亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

原理區(qū)別:

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

  • 1、如果目標(biāo)對象實(shí)現(xiàn)了接口,默認(rèn)情況下會采用JDK的動態(tài)代理實(shí)現(xiàn)AOP
  • 2、如果目標(biāo)對象實(shí)現(xiàn)了接口,可以強(qiáng)制使用CGLIB實(shí)現(xiàn)AOP
  • 3、如果目標(biāo)對象沒有實(shí)現(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)文章

  • JDK10新特性之var泛型和多個接口實(shí)現(xiàn)方法

    JDK10新特性之var泛型和多個接口實(shí)現(xiàn)方法

    這篇文章主要介紹了JDK10的新特性:var泛型和多個接口實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • MyBatis自定義resultMap三種映射關(guān)系示例詳解

    MyBatis自定義resultMap三種映射關(guān)系示例詳解

    這篇文章主要介紹了MyBatis自定義resultMap三種映射關(guān)系,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 詳解JavaWeb如何實(shí)現(xiàn)文件上傳和下載功能

    詳解JavaWeb如何實(shí)現(xiàn)文件上傳和下載功能

    這篇文章主要介紹了如何利用JavaWeb實(shí)現(xiàn)文件的上傳和下載功能,文中的示例代碼講解詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • Java如何執(zhí)行cmd命令

    Java如何執(zhí)行cmd命令

    這篇文章主要介紹了Java如何執(zhí)行cmd命令問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • SpringBoot 部署到服務(wù)器上的方法

    SpringBoot 部署到服務(wù)器上的方法

    下面小編就為大家分享一篇SpringBoot 部署到服務(wù)器上的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • idea中項(xiàng)目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決

    idea中項(xiàng)目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決

    這篇文章主要介紹了idea中項(xiàng)目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java格式化數(shù)值成貨幣格式示例

    java格式化數(shù)值成貨幣格式示例

    這篇文章主要介紹了java格式化數(shù)值成貨幣格式示例,格式化一個數(shù)值,比如123456789.123,希望顯示成"$123,456,789.123",需要的朋友可以參考下
    2014-04-04
  • 淺析JAVA 循環(huán)結(jié)構(gòu)

    淺析JAVA 循環(huán)結(jié)構(gòu)

    這篇文章主要介紹了JAVA 循環(huán)結(jié)構(gòu)的相關(guān)資料,文中講解的非常細(xì)致,示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 淺析Java多線程同步synchronized

    淺析Java多線程同步synchronized

    本篇文章給大家詳細(xì)分析了Java多線程同步synchronized的相關(guān)知識點(diǎn),需要的讀者們可以參考學(xué)習(xí)下。
    2018-02-02
  • MybatisPlus 多租戶架構(gòu)(Multi-tenancy)實(shí)現(xiàn)詳解

    MybatisPlus 多租戶架構(gòu)(Multi-tenancy)實(shí)現(xiàn)詳解

    這篇文章主要介紹了MybatisPlus 多租戶架構(gòu)(Multi-tenancy)實(shí)現(xiàn)詳解,詳細(xì)的介紹了什么是多租戶架構(gòu)以及使用MybatisPlus實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論