1. 程式人生 > >Aop筆記。

Aop筆記。

enter use center 對象 動態代理 for pan 接口 npoi

Spring程序中實現AOP

  1. Spring程序實現aop的方式

1) 使用Spring的API實現AOP,將方面切入Spring管理的bean

2) 使用AspectJ的API實現AOP,將方面切入到任何對象

  1. 使用@AspectJ的各種註解
  2. 使用aop:config元素配置AOP,基於xml進行配置aop, 基於Schema的AOP支持

Spring 框架實現aop使用動態代理的方式實現AOP

設計模式:

單例模型, 工廠模式, 代理(Proxy)模式(Pattern)

代理模式:

  1. 靜態代理 static proxying
  2. 動態代理 dynamic proxying

  1. AOP的一些概念/術語

1) 切面/方面(Aspect)一個關註點的模塊化,這個關註點可能會橫切多個對象。可創建方面類,用於包含次要業務邏輯。

2) 通知(Advice)在切面的某個特定的連接點上執行的動作,也就是方面包含/要執行的操作。通知有5中類型:

  1. 前置通知(Before advice): 在某連接點之前執行的通知
  2. 返回後通知(After returning advice): 在某連接點正常完成後執行的通知:例如,一個方法沒有拋出任何異常,正常返回。
  3. 異常後通知(After throwing advice): 在方法拋出異常退出時執行的通知。
  4. 最終通知(After (finally) advice):
    當某連接點退出的時候執行的通知(不論是正常返回還是異常退出)。
  5. 環繞通知(Around Advice): 最強大的通知,可替換上面任何一個通知, 環繞通知在一個方法執行之前和之後執行。它使得通知有機會 在一個方法執行之前和執行之後運行。而且它可以決定這個方法在什麽時候執行,如何執行,甚至是否執行. 盡量使用最簡單的通知,比如如果你需要一個前置通知,則使用前置通知即可.在環繞通知中,你可以決定是否執行目標方法. 類似一個攔截器.

通知執行順序: 前置通知

3) 連接點(Joinpoint) 在程序執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。在Spring AOP中,一個連接點總是表示一個方法的執行

,一個連接點其實就是一個方法。

4) 切入點(Pointcut) 選定要切入方面或通知的連接點叫做切入點,也就是指定要切入通知或方法的方法。

切入點書寫模式

execution(modifiers-pattern? return-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

訪問定界符: public, private, protected, default(不寫就是default)

execution(訪問定界符 方法返回類型 包.類.方法 (參數) 可拋出異常類型)

例如: execution(* com.qdu.dao.*. *(..) )

上例表示com.qdu.dao包下所有類中的所有方法,不管有多個參數,第一個*表示方法返回類型為任何類型

execution關鍵字 - 匹配方法執行的連接點,這是你會用到的Spring的最主要的切入點指示符。

切入點示例:

? 任意公共方法的執行:

execution(public * *(..))

? 任何一個名字以“set”開始的方法的執行:

execution(* set*(..))

? AccountService接口定義的任意方法的執行:

execution(* com.xyz.service.AccountService.*(..))

? service包中定義的任意方法的執行:

execution(* com.xyz.service.*.*(..))

? service包或其子包中定義的任意方法的執行:

execution(* com.xyz.service..*.*(..))

5) 目標(Target): 是方面應用到的對象,如 UserDaoImpl的對象

6) 織入(Weaving): 將方面應用到目標對象的過程叫做織入 weave

Aop筆記。