具有超级方法调用的继承方法的切入点



我有以下类

class A {
public void someone() {
helpMe();
}
private void helpMe() {
// do something here
}
}
class B extends A {
public void help() {
super.someone();
}
}
class C extends A {
public void me() {
super.someone();
}
}

所以我想在每次调用该方法时都做一些事情helpMe。 从不显式调用A.helpMe()。所有方法对A.helpMe()的调用都是通过A.someone()通过B.help()C.me()进一步调用。

helpMe包含每个其他类都需要的通用实现。

我试过的切入点

execution(* A.helpMe(..)) // does not work
execution(* A+.helpMe(..)) // does not work
execution(* *.helpMe(..)) // does not work
execution(* A.*(..)) // does not work
execution(* B.someone(..)) // does not work
execution(* A+.*(..)) // forms a point cut for B.help() and C.me() only
execution(* *.*(..)) // forms a point cut for B.help() and C.me() only
execution(* B.*(..)) // forms a point cut for B.help() only

我在某处读到不允许pointcutssuper。如果是这种情况,有哪些有效的解决方法?

我试过用annotationspointcut,但它也不起作用。

1 如有疑问,请始终回退到完全硬编码的切入点并再次前进:

execution(private void helpMe())

您确定使用的是AspectJ而不是香草Spring AOP(它不能建议使用私有方法)吗?


仅供参考:https://www.eclipse.org/aspectj/doc/next/progguide/language-joinPoints.html

call加入点不会捕获对非静态方法的超级调用

。这并非不适用于execution

最新更新