分類pointcuts
遵循特定的語法用于捕獲每一個種類的可使用連接點。
主要的種類:
- 方法執行:execution(MethodSignature)
- 方法調用:call(MethodSignature)
- 構造器執行:execution(ConstructorSignature)
- 構造器調用:call(ConstructorSignature)
- 類初始化:staticinitialization(TypeSignature)
- 屬性讀操作:get(FieldSignature)
- 屬性寫操作:set(FieldSignature)
- 例外處理執行:handler(TypeSignature)
- 對象初始化:initialization(ConstructorSignature)
- 對象預先初始化:preinitialization(ConstructorSignature)
- Advice執行:adviceexecution()
基于控制流的pointcuts 主要包括兩種類型的控制流:
cflow(Pointcut),捕獲所有的連接點在指定的方法執行中,包括執行方法本身。
cflowbelow(Pointcut),捕獲所有的連接點在指定的方法執行中,除了執行方法本身。
如以下的例子:
cflow(call(* Account.debit(..)) 所有的debit方法中的連接點,包括debit方法本身
cflowbelow(call(* Account.debit(..)) 所有debit方法中的連接點,除了debit方法本身
cflow(transactedOperations()) 所有由transactedOperations捕獲的連接點
cflowbelow(execution(Account.new(..)) 所有在Account 構造器中執行的連接點
基于詞匯結構的連接點 源代碼片斷。,如within()和withincode()
within :捕獲在指定類或者方面中的程序體中的所有連接點,包括內部類。
Withincode:用于捕獲在構造器或者方法中的所有連接點,包括在其中的本地類
執行對象連接點 匹配this,和target對象,作為方法被調用的對象。
this(Account),所有Account的實例的執行點,匹配所有的連接點,如方法調用,屬性設置,當前的執行對象為Account,或者其子類。
target(Account):匹配所有的連接點,目標對象為Account或其子類。
必須執行相應的類型,不能使用*,或者..通配符。當前靜態方法,不能被匹配。
在within()和this()中的區別:
一個是程序體,而另一個為對象執行。
參數pointcuts 用于捕獲參數類型的連接點。
args(String,..,int)
args(RemoteException)
條件檢測pointcuts if(System.currentTimeMillis()>triggerTime)
posted on 2007-07-04 16:39
周銳 閱讀(265)
評論(0) 編輯 收藏 所屬分類:
AspectJ