AOP概念

AOP(Aspect-Oriented programming)面向方面編程,從模塊化出發,用來描述分散在對象、類或函數中的橫切關注點。從關注點中分離出橫切關注點是面向切面的程序設計的核心概念。分離關注點是解決特定領域的代碼從業務邏輯中獨立出來,業務邏輯的代碼中不再含義針對領域問題代碼的調用,業務邏輯同特定領域問題的關係通過切面來封裝,維護,這樣原本分散在整個應用程序中的變動就可以很好地管理起來。

層次3--語言和開發環境

層次2--面向方面系統

層次1--底層編織實現模塊


Advice(通知)定義在連接點做什麼,爲切面增強提供織入接口。在SpringAOP中,主要圍繞方法調用而注入的切面行爲。

BeforeAdvice定義了爲待增強的目標方法設置的前置增強接口MethodBeforeAdvice,使用這個前置接口需要實現一個回調函數void before(Method method,Object[] args,Object target)throws Exception;Method對象,是目標方法的反射對象,Object[]  對象數組,包含目標方法的輸入參數。目標方法調用之前實現切面增強。

AfterAdvice,AfterReturningAdvice定義了接口方法void afterReturning(Object returnValue,Method method,Object[] args,Object target) throws Throwable;

afterReturning也是一個回調函數,在目標方法調用成功併成功返回的時候,接口會被SpringAOP回調。目標方法成功調用返回結果後實現切面增強。

ThrowsAdvice,沒有指定需要實現的接口方法,在拋出異常時被回調,這個回調是AOP使用反射機制來完成的。

PointCut:切點決定Advice通知應該作用於哪個連接點,也就是通過PointCut來定義需要增強的方法的集合,通常意味着標識方法。

Advisor通知器:完成的目標方法的切面增強設計和關注點的設計後,將它們結合起來。通過Advisor,可以定義應該使用哪個通知並在哪個關注點使用它,這個結合爲使用IOC容器配置AOP應用提供便利。在DefaultAdvisor中,有兩個屬性:advice和pointcut。


Spring AOP的核心是動態代理,JDK的一個特性,可以爲任意java對象創建代理對象。

Client      -----request()--------》

Proxy模式:  1.[preOperation()]

            ------2.request()------->       RealSubject

           3.postOperation()


<span style="font-size:24px;">public interface InvocationHandler(){</span>
public Object invoke(Object proxy,Method method,
Object[] args) throws Throwable;
}
invoke 方法,第一個參數是代理對象實例,第二個參數是Method方法對象,代表的是當前Proxy被調用的方法,最後一個是被調用的方法的參數。


Spring AOP的應用場景:直接使用AOP的功能,設計應用的橫切關注點,把跨應用程序多個模塊的功能抽象出來,通過簡單的AOP使用,靈活的編到模塊中,比如通過AOP實現應用程序的日誌功能。

在Spring內部,一些支持模塊也是通過SpringAOP來實現的。

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