AOP原理?

面向切面編程,在我們的應用中,經常需要做一些事情,但是這些事情與核心業務無關,比如,事務、日誌、權限攔截、統一異常處理等等。Spring AOP使用了代理模式。
Spring AOP底層利用兩種代理模式實現:
JDK動態代理,只能對實現了接口的類生成代理,而不能針對類,該目標類型實現的接口都將被代理。原理是通過在運行期間創建一個接口的實現類來完成對目標對象的代理。
CGLIB,針對類實現代理,對是否實現接口並無要求。原理是對指定的類生成一個子類,覆蓋其中的方法,因爲是繼承,所以被代理的類或方法最好不要聲明爲final。
Spring AOP對這兩種代理方式的選擇: 
1. 如果目標對象實現了接口,默認情況下會採用JDK的動態代理實現AOP; 
2. 如果目標對象實現了接口,可以強制使用cglib實現AOP; 
3. 如果目標對象沒有實現接口,必須採用cglib庫,Spring會自動在JDK動態代理和cglib之間轉換。
Spring AOP提供了5種類型的通知
1)Before:在方法被調用之前調用通知; 
2)After:在方法完成之後調用通知,無論方法執行是否成功; 
3)After-returning:在方法成功執行之後調用通知; 
4)After-throwing:在方法拋出異常後調用通知; 
5)Around:通知包裹了被包裹的方法,在被通知的方法調用之前和調用之後執行自定義的行爲;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章