Jdk代理和CGLIB代理的區別
1.原理區別
java動態代理是利用反射機制生成一個實現代理介面的匿名類,在呼叫具體方法前呼叫InvokeHandler來處理。核心是實現InvocationHandler介面,使用invoke()方法進行面向切面的處理,呼叫相應的通知。
而cglib動態代理是利用asm開源包,對代理物件類的class檔案載入進來,通過修改其位元組碼生成子類來處理。核心是實現MethodInterceptor介面,使用intercept()方法進行面向切面的處理,呼叫相應的通知。
-
如果目標物件實現了介面,預設情況下會採用JDK的動態代理實現AOP
-
如果目標物件實現了介面,可以強制使用CGLIB實現AOP
-
如果目標物件沒有實現了介面,必須採用CGLIB庫,spring會自動在JDK動態代理和CGLIB之間轉換
可以強制使用CGlib(在spring配置中加入<aop:aspectj-autoproxy proxy-target-class=“true”/>
)
springboot專案配置: spring.aop.proxy-target-class=false
2.CGlib比JDK快?
1、CGLib底層採用ASM位元組碼生成框架,使用位元組碼技術生成代理類,在jdk6之前比使用Java反射效率要高。唯一需要注意的是,CGLib不能對宣告為final的方法進行代理,因為CGLib原理是動態生成被代理類的子類。
2、在jdk6、jdk7、jdk8逐步對JDK動態代理優化之後,在呼叫次數較少的情況下,JDK代理效率高於CGLIB代理效率,只有當進行大量呼叫的時候,jdk6和jdk7比CGLIB代理效率低一點,但是到jdk8的時候,jdk代理效率高於CGLIB代理。
3、在對JDK動態代理與CGlib動態代理的程式碼實驗中看,1W次執行下,JDK7及8的動態代理效能比CGlib要好20%左右。
3.各自侷限:
1、JDK的動態代理機制只能代理實現了介面的類,而不能實現介面的類就不能實現JDK的動態代理。
2、cglib是針對類來實現代理的,他的原理是對指定的目標類生成一個子類,並覆蓋其中方法實現增強,但因為採用的是繼承,所以不能對final修飾的類進行代理。
4. 總結
相關文章
- 動態代理jdk和cglib的區別JDKCGLib
- JDK 和 CGLib 實現動態代理和區別JDKCGLib
- cglib動態代理和jdk動態代理的區別與應用CGLibJDK
- JDK動態代理和CGLib代理JDKCGLib
- JDK動態代理和 CGLIB 代理JDKCGLib
- Java代理(jdk靜態代理、動態代理和cglib動態代理)JavaJDKCGLib
- Java動態代理(JDK和cglib)JavaJDKCGLib
- 靜態代理和動態代理(jdk/cglib)詳解JDKCGLib
- spring aop原理 JDK動態代理和CGLIB動態代理SpringJDKCGLib
- 你必須會的 JDK 動態代理和 CGLIB 動態代理JDKCGLib
- 代理模式詳解:靜態代理、JDK動態代理與Cglib動態代理模式JDKCGLib
- Java動態代理 jdk和cglib的實現比較JavaJDKCGLib
- SpringAOP中JDK和CGLib動態代理哪個更快?SpringJDKCGLib
- Java JDK Proxy和CGLib動態代理示例講解JavaJDKCGLib
- 動態代理jdk的Proxy與spring的CGlibJDKSpringCGLib
- 反向代理和正向代理區別
- CGLIB代理CGLib
- HTTP代理和SOCKS代理的主要區別HTTP
- Spring動態代理的生成-如何判斷是使用JDK動態代理還是CGlib代理SpringJDKCGLib
- 【Spring】AOP的代理預設是Jdk還是Cglib?SpringJDKCGLib
- cglib代理的使用CGLib
- Java提高班(六)反射和動態代理(JDK Proxy和Cglib)Java反射JDKCGLib
- 面試造火箭系列,栽在了cglib和jdk動態代理面試CGLibJDK
- 正向代理和反向代理的本質區別
- 《Proxy系列專題》:代理模式(靜態、JDK、CGLib)模式JDKCGLib
- Jmh測試JDK,CGLIB,JAVASSIST動態代理方式的效能JDKCGLibJava
- Spring原始碼剖析5:JDK和cglib動態代理原理詳解Spring原始碼JDKCGLib
- CGLib 動態代理CGLib
- java中Cglib代理的使用JavaCGLib
- HTTP代理與SOCKS代理的主要區別HTTP
- 3.靜態代理&動態代理&CGlibCGLib
- 動態代理-cglib分析CGLib
- HTTP代理和SOCKS5代理的三大區別HTTP
- 高匿代理IP和透明代理IP有哪些區別?
- 海外HTTP代理中全域性代理和區域性代理是什麼?有什麼區別?HTTP
- 高匿IP代理與透明IP代理的區別
- SOCKS代理與HTTP代理主要區別分析HTTP
- SOCKS5代理和HTTP代理有什麼區別?HTTP