這篇文章將為大家詳細(xì)講解有關(guān)JDK動態(tài)代理與CGLIB動態(tài)代理有什么區(qū)別,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
十年的阿克塞哈薩克族自治網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整阿克塞哈薩克族自治建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“阿克塞哈薩克族自治網(wǎng)站設(shè)計”,“阿克塞哈薩克族自治網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
區(qū)別:
JDK是基于反射機制,生成一個實現(xiàn)代理接口的匿名類,然后重寫方法,實現(xiàn)方法的增強.
它生成類的速度很快,但是運行時因為是基于反射,調(diào)用后續(xù)的類操作會很慢.
而且他是只能針對接口編程的.
CGLIB是基于繼承機制,繼承被代理類,所以方法不要聲明為final,然后重寫父類方法達(dá)到增強了類的作用.
它底層是基于asm第三方框架,是對代理對象類的class文件加載進(jìn)來,通過修改其字節(jié)碼生成子類來處理.
生成類的速度慢,但是后續(xù)執(zhí)行類的操作時候很快.
可以針對類和接口.
性能上的區(qū)別:
因為jdk是基于反射,CGLIB是基于字節(jié)碼.所以性能上會有差異.
在老版本CGLIB的速度是JDK速度的10倍左右,但是CGLIB啟動類比JDK慢8倍左右,但是實際上JDK的速度在版本升級的時候每次都提高很多性能,而CGLIB仍止步不前.
在對JDK動態(tài)代理與CGlib動態(tài)代理的代碼實驗中看,1W次執(zhí)行下,JDK7及8的動態(tài)代理性能比CGlib要好20%左右。
實現(xiàn):
1、JDK動態(tài)代理商具體實現(xiàn)原理:
通過實現(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ù)參入;
JDK動態(tài)代理商是面向接口的代理商模式,假如被代理商目標(biāo)沒有接口那么Spring也無能為力,Spring通過Java的反射機制生產(chǎn)被代理商接口的新的匿名實現(xiàn)類,重寫了其中AOP的加強方法。
2、CGLib動態(tài)代理商:
CGLib是一個強大、高性能的Code生產(chǎn)類庫,可以實現(xiàn)運行期動態(tài)擴展java類,Spring在運行期間通過 CGlib繼承要被動態(tài)代理商的類,重寫父類的方法,實現(xiàn)AOP面向切面編程呢。
如何強制使用CGLIB實現(xiàn)AOP?
(1)添加CGLIB庫,SPRING_HOME/cglib/*.jar
(2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>
JDK動態(tài)代理和CGLIB字節(jié)碼生成的區(qū)別?
(1)JDK動態(tài)代理只能對實現(xiàn)了接口的類生成代理,而不能針對類
(2)CGLIB是針對類實現(xiàn)代理,主要是對指定的類生成一個子類,覆蓋其中的方法
因為是繼承,所以該類或方法最好不要聲明成final
總結(jié):
Spring AOP中的JDK和CGLib動態(tài)代理商關(guān)于這個知識點很重要,關(guān)于兩者之間性能的比照經(jīng)過測試試驗已經(jīng)有了一個初步的結(jié)果,以后再有人問你Spring AOP,不要簡單的說JDK動態(tài)代理商和CGLib這兩個了,是時候的可以拋出來對兩者之間區(qū)別的了解,是有加分的哦!
關(guān)于JDK動態(tài)代理與CGLIB動態(tài)代理有什么區(qū)別就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章名稱:JDK動態(tài)代理與CGLIB動態(tài)代理有什么區(qū)別
網(wǎng)址分享:http://aaarwkj.com/article18/jeepdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、定制開發(fā)、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)、網(wǎng)站排名、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)