execution(Signature)切入點的語法是:
pointcut <pointcut name>(<any values to be picked up>) : execution(<optional modifier> <return type> <class>.<method>(<parameter types>));
它與call(Signature)切入點類似,但重要的區別是:在什么地方調用通知,以及它的環境是什么?
就call(Signature)切入點來說,在調用方法的地方調用通知。調用通知的環境是調用類。一旦進入方法,因而調用的環境是正在執行的方法時,就會調用execution(Signature)切入點。
另外:call(Signature)切入點和execution(Signature)切入點在捕獲繼承和/或重寫(依賴于對象的靜態和動態類型)的對象方法上的連接點時它們有一些奇怪的行為。
package com.eric.aspectj;
public aspect MyAspectj {
pointcut callPointCut(My myClass, int age, String name) : execution(void com.eric.aspectj.My.foo(int, String)) && this(myClass) && args(age, name);
before(My myClass, int age, String name) : callPointCut(myClass, age, name) {
System.out.println("signature: " + thisJoinPoint.getStaticPart().getSignature());
System.out.println("Source Line: " + thisJoinPoint.getStaticPart().getSourceLocation());
System.out.println("before...name : " + name + " age : " + age);
}
after(My myClass, int age, String name) returning: callPointCut(myClass, age, name) {
System.out.println("after...");
}
}
posted on 2007-07-03 15:38
周銳 閱讀(351)
評論(0) 編輯 收藏 所屬分類:
AspectJ