家长班:
public class Animal {
public String name() {
return "my name";
}
}
儿童班:
public class Dog extends Animal {
// no methods
}
我正在尝试用AspectJ横切调用Dog.name()
,但不起作用:
@Aspect
public class Crosscut {
@Around("execution(* Dog.name())")
public Object exec(ProceedingJoinPoint point) {
// this point is never reached
}
}
但是,如果我将一个子方法添加到Dog
类,则横切有效:
public class Dog extends Animal {
public String name() {
return super.name();
}
}
如何编写正确的横切?或者根本不可能?
答案 0 :(得分:1)
由于aspectj在此处不创建新方法,因此无法匹配Dog.name()
。
您需要做的是在Animal.name()
上声明建议并使用this(...)
使aspectj添加运行时检查实例。
尝试
@Around("execution(* Animal.name()) && this(Dog)")
答案 1 :(得分:1)
实际上jontro的想法很好,但是如果你没有注意到Dog
,但希望拦截name()
及其子类上的所有Animal
方法,解决方案会更简单:
@Around("execution(* Animal+.name())")