我有以下类
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
我在某处读到不允许pointcuts
super
。如果是这种情况,有哪些有效的解决方法?
我试过用annotations
pointcut
,但它也不起作用。
1 如有疑问,请始终回退到完全硬编码的切入点并再次前进:
execution(private void helpMe())
您确定使用的是AspectJ而不是香草Spring AOP(它不能建议使用私有方法)吗?
仅供参考:https://www.eclipse.org/aspectj/doc/next/progguide/language-joinPoints.html
call
加入点不会捕获对非静态方法的超级调用
。这并非不适用于execution
。