我想拦截给定类的任何子类的非注释方法的执行。
例如,假设我有课Base
:
public class Base {
public void baseMethod() { //shouldn't be intercepted
// do whatever...
}
}
并且,最终,有人扩展了Base
. 不管新的类名是什么,它的带有一些注解的方法@LeaveItAlone
都不应该被截取。子类的所有其他方法都应该。
public class Sub extends Base {
public void interceptedMethod1() {
// ...
}
public void interceptedMethod2() {
// ...
}
@LeaveItAlone
public void NOTinterceptedMethod1() {
// ...
}
@LeaveItAlone
public void NOTinterceptedMethod2() {
// ...
}
我想像:
pointcut sub_nonannotated() : !execution(@LeaveItAlone * Base+.*(..));
但我确定以上是错误的。
附带问题:如何专门拦截子类的构造函数?