SpringAOP - 代理的實現方式

靜態代理:在代理類中持有一個目標類的引用,而後對目標類的方法進行代理
缺點很明顯,受限於方法的數量;java

動態代理:基於反射實現,比較易用
有兩種實現:
1.基於接口的代理,表明爲JDK實現的動態代理
類 java.lang.reflect.Proxy
接口 InvocationHandler代理

2.基於繼承的代理,表明爲Cglib實現的動態代理
沒法對static和final類進行代理
沒法對private和static方法進行代理對象


Spring AOP的選擇順序:
1.若目標對象實現了接口,則默認使用JDK動態代理
2.若目標對象沒有實現接口,則採用Cglib進行動態代理
3.若是目標對象實現了接口,且強制Cglib代理,則使用Cglib進行動態代理
在目標類上使用註解 @EnableAspectAutoProxy(proxyTrgetClass=true) 則是強制Cglib代理繼承

使用Spring AOP 的注意事項
1.不宜將重要的業務邏輯放到aop中處理
2.沒法攔截static、private、final方法
3.沒法攔截內部方法調用接口

相關文章
相關標籤/搜索