標籤:數組 基礎文法 表達 類型 exe monit span 操作 類類型
@AspectJ使用jdk5.0和正規的AspectJ切點運算式描述切面, 由於spring只支援方法的連接點,所以Spring只支援部分AspectJ的切點語言.
1.切點運算式函數
AspectJ 5的切點運算式有關鍵字和巨集指令引數組成,如execution(* greetTo(..))的切點運算式, execution為關鍵字, "* greetTo(..)"為巨集指令引數.在這裡execution表示目標類執行某一方法, 而"* greetTo(..)"描述目標方法的匹配模式, 兩者聯合起來表示目標類greetTo()方法的連接點.為了描述方便, 將execution()稱作為函數, 而將匹配串"* greetTo(..)"稱為函數的入參.
Spring支援9個@AspectJ切點運算式函數, 它們用不同的方式描述目標類的連接點.根據描述對象的不同, 可以大致分為4種類型.
- 方法切點函數: 通過描述目標類方法資訊定義連接點
- 方法入參切點函數: 通過描述目標類方法的入參資訊定義連接點
- 目標類切點函數: 通過描述目標類類型資訊定義連接點
- 代理類切點函數: 通過描述目標類的代理類的資訊定義連接點.
這四種類型的切點函數, 通過下表進行詳細說明:
| 類別 |
函數 |
入參 |
說明 |
| 方法切點函數 |
execution() |
方法匹配模式 |
表示滿足某一模式的所有目標類方法連接點, 如execution(* greetTo(..))表示所有目標類中的greetTo()方法 |
| @annotation() |
方法註解類名 |
表示標註了特定註解的目標方法連接點, 如@annotation(com.bao.bao.aop.NeedTest)表示任何標註了@NeedTest註解的目標類方法 |
方法入參切點函數
|
args() |
類名 |
通過判斷目標類方法運行時入參對象的類型定義指定連接點.如args(com.bao.bao.Waiter)表示所有有且僅有一個按類型匹配於Waiter入參的方法 |
| @args() |
類型註解類名 |
通過判斷目標方法運行時入參對象的類型是否標註特定註解來指定連接點, 如@args(com.bao.bao.Monitorable)表示任何這樣的一個目標方法, 它有一個入參且入參對象的類標註了@Monitorable註解 |
| 目標類切點函數 |
within() |
類名匹配器 |
表示特定域下的所有連接點.如within(co.bao.bao.service.*)表示com.bao.bao.service包中的所有連接點.即包中所有的類的所有方法, 而within(com.bao.bao.service.*Service)表示在com.bao.bao. |
| 代理類切點函數 |
|
|
|
基於@AspectJ和schema的aop(二)[email protected]基礎文法