spring動態代理的實現方式

java動態代理: 利用反射機制生成一個實現代理接口的匿名類,在調用具體方法前調用InvokeHandler來處理。
cglib動態代理: 利用asm開源包,對代理對象類的class文件加載進來,通過修改其字節碼生成子類來處理。
JDK動態代理和CGLIB字節碼生成的區別?
JDK動態代理只能對實現了接口的類生成代理,而不能針對類
CGLIB是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法 因爲是繼承,所以該類或方法不要聲明成final
二、適用場景:
如果目標對象實現了接口,默認情況下會採用JDK的動態代理實現AOP
如果目標對象實現了接口,可以強制使用CGLIB實現AOP
如果目標對象沒有實現了接口,必須採用CGLIB庫,spring會自動在JDK動態代理和CGLIB之間轉換
三、如何強制使用CGLIB實現AOP:
1、添加CGLIB庫,SPRING_HOME/cglib/*.jar
2、在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class=“true”/>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章