execution(Signature)切入點的語法是:
pointcut <pointcut name>(<any values to be picked up>) : execution(<optional modifier> <return type> <class>.<method>(<parameter types>));
它與call(Signature)切入點類似,但重要的區(qū)別是:在什么地方調(diào)用通知,以及它的環(huán)境是什么?
就call(Signature)切入點來說,在調(diào)用方法的地方調(diào)用通知。調(diào)用通知的環(huán)境是調(diào)用類。一旦進入方法,因而調(diào)用的環(huán)境是正在執(zhí)行的方法時,就會調(diào)用execution(Signature)切入點。
另外:call(Signature)切入點和execution(Signature)切入點在捕獲繼承和/或重寫(依賴于對象的靜態(tài)和動態(tài)類型)的對象方法上的連接點時它們有一些奇怪的行為。
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...");
}
}