亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JDK動態代理與CGLIB動態代理有什么區別

發布時間:2021-07-11 15:27:26 來源:億速云 閱讀:145 作者:Leah 欄目:大數據

這篇文章將為大家詳細講解有關JDK動態代理與CGLIB動態代理有什么區別,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

區別:

JDK是基于反射機制,生成一個實現代理接口的匿名類,然后重寫方法,實現方法的增強.
它生成類的速度很快,但是運行時因為是基于反射,調用后續的類操作會很慢.
而且他是只能針對接口編程的.

CGLIB是基于繼承機制,繼承被代理類,所以方法不要聲明為final,然后重寫父類方法達到增強了類的作用.
它底層是基于asm第三方框架,是對代理對象類的class文件加載進來,通過修改其字節碼生成子類來處理.
生成類的速度慢,但是后續執行類的操作時候很快.
可以針對類和接口.

性能上的區別:

因為jdk是基于反射,CGLIB是基于字節碼.所以性能上會有差異.
在老版本CGLIB的速度是JDK速度的10倍左右,但是CGLIB啟動類比JDK慢8倍左右,但是實際上JDK的速度在版本升級的時候每次都提高很多性能,而CGLIB仍止步不前.

在對JDK動態代理與CGlib動態代理的代碼實驗中看,1W次執行下,JDK7及8的動態代理性能比CGlib要好20%左右。

實現:

1、JDK動態代理商具體實現原理:

通過實現InvocationHandler接口創立自己的調使用解決器;

通過為Proxy類指定ClassLoader對象和一組interface來創立動態代理商;

通過反射機制獲取動態代理商類的構造函數,其唯一參數類型就是調使用解決器接口類型;

通過構造函數創立動態代理商類實例,構造時調使用解決器對象作為參數參入;

JDK動態代理商是面向接口的代理商模式,假如被代理商目標沒有接口那么Spring也無能為力,Spring通過Java的反射機制生產被代理商接口的新的匿名實現類,重寫了其中AOP的加強方法。

2、CGLib動態代理商:

CGLib是一個強大、高性能的Code生產類庫,可以實現運行期動態擴展java類,Spring在運行期間通過 CGlib繼承要被動態代理商的類,重寫父類的方法,實現AOP面向切面編程呢。

如何強制使用CGLIB實現AOP?
 (1)添加CGLIB庫,SPRING_HOME/cglib/*.jar
 (2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>

JDK動態代理和CGLIB字節碼生成的區別?
 (1)JDK動態代理只能對實現了接口的類生成代理,而不能針對類
 (2)CGLIB是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法
   因為是繼承,所以該類或方法最好不要聲明成final 

總結:

    Spring AOP中的JDK和CGLib動態代理商關于這個知識點很重要,關于兩者之間性能的比照經過測試試驗已經有了一個初步的結果,以后再有人問你Spring AOP,不要簡單的說JDK動態代理商和CGLib這兩個了,是時候的可以拋出來對兩者之間區別的了解,是有加分的哦!

關于JDK動態代理與CGLIB動態代理有什么區別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

古交市| 富源县| 延寿县| 卓资县| 准格尔旗| 台江县| 井冈山市| 博乐市| 鄂州市| 苏尼特左旗| 会理县| 香河县| 穆棱市| 蓬溪县| 都江堰市| 康保县| 绍兴市| 隆安县| 六枝特区| 炉霍县| 泸溪县| 玉林市| 宁津县| 资兴市| 岳西县| 太原市| 兴业县| 肇源县| 定日县| 涟源市| 新疆| 水城县| 恩平市| 临漳县| 榆林市| 松溪县| 龙胜| 凌海市| 当阳市| 区。| 长春市|