1. 程式人生 > >Spring AOP框架體系小結

Spring AOP框架體系小結

一、這裡先列舉一些AOP基本概念,後面提到再作相應解釋

1)目標物件 target

2)代理物件 proxy

3)切點 pointcut

4)增強 advice

5)切面 advisor

6)織入器:將增強邏輯嵌入到目標物件的切點位置上從而生成代理物件的工具,相當於連線目標物件和代理物件的橋樑

二、說到框架體系,就要從底層慢慢往上做抽象,那就先從設計模式和實現機制講起:

Spring AOP的設計模式是代理模式

1.靜態代理:在編譯時就給每個需要增強的目標物件編寫出對應的代理物件,缺點是如果增強的邏輯都一樣,那麼每個代理物件之間就有很多重複性的程式碼。

2.動態代理:在系統執行時才給目標物件建立代理物件,克服了靜態代理的缺點,增強的邏輯程式碼只需寫一遍。

三、Spring AOP採用動態代理模式,實現機制有兩種:

1)基於介面的JDK自帶的動態代理元件,這裡主要包括InvocationHandler和Proxy兩個類

2)基於類的CGLib類庫的動態位元組碼增強技術,通過建立目標類的子類,擴充套件生成代理物件,這裡主要包括MethodInterceptor(net.sf.cglib.proxy.MethodInterceptor)和Enhancer兩個類

四、Spring AOP織入器

Spring AOP中的最基本的織入器是ProxyFactory,其內部就是使用JDK或CGLib動態代理技術將增強織入到目標類中:Cglib2AopProxy和JdkDynamicAopProxy。

五、Spring AOP增強的五種型別:

1)前置增強:BeforeAdvice

2)後置增強:AfterReturningAdvice

3)環繞增強:MethodInterceptor(org.aopalliance.intercept.MethodInterceptor)

4)異常丟擲增強:ThrowsAdvice

5)引介增強:IntroductionInterceptor,這個比較特殊,表示在目標類中新增一些新的方法和屬性

六、切點 Pointcut

假設我們希望有選擇地織入目標類的某些特定方法,就需要使用切點進行這些特定方法的定位。Spring AOP通過Pointcut這個介面描述切點,Pointcut由ClassFilter和

MethodMatcher構成,通過ClassFilter定位到目標類,通過MethodMatcher定位到類的特定方法。

七、切面Advisor

切面Advisor由增強Advice和切點Pointcut構成,由於增強的不同又分為PointcutAdvisor和IntroductionAdvisor。前者最常見的實現是DefaultPointcutAdvisor,可由任意的Pointcut和Advice構成,唯一不支援的是引介增強,所以有了後者。前面了這個引介增強IntroductionInterceptor很特殊,這裡展開講講:通過引介增強,可以為目標類新增一個介面的實現,即原來目標類未實現某個介面,通過引介增強可以為目標類建立實現某介面的代理。Spring定義了引介增強介面IntroductionInterceptor,但沒有定義任何方法。Spring為該介面提供了DelegatingIntroductionInterceptor實現類,一般情況下,通過繼承該類來定義自己的介增強類。

而引介切面最常見的實現是DefaultIntroductionAdvisor。

八、自動建立代理

Spring AOP建立在Spring IOC基礎上,所以能夠享受到很多Spring容器帶來的便利功能,其中之一就是Spring提供自動代理機制,讓容器自動生成代理,把開發人員從繁瑣的配置工作解放出來。在內部,Spring使用BeanPostProcessor自動完成這項工作,其中最常見最基本的實現是DefaultAdvisorAutoProxyCreator。