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
周锐 阅读(345)
评论(0) 编辑 收藏 所属分类:
AspectJ