Java 具有超级方法调用的继承方法的切入点
我有以下课程Java 具有超级方法调用的继承方法的切入点,java,spring-boot,aop,aspectj,pointcut,Java,Spring Boot,Aop,Aspectj,Pointcut,我有以下课程 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
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
我在某个地方读到,super
的切入点是不允许的。如果是这样,有哪些有效的解决办法
我已经尝试使用注释获取切入点,但它也不起作用 1如果有疑问,请始终返回到完全硬编码的切入点,然后再次向前工作:
execution(private void helpMe())
您确定您是,而不是vanilla Spring AOP(它不能建议私有方法)
供参考:
调用
连接点不捕获对非静态方法的超级调用
。。。这不适用于执行
Spring AOP是通过代理应用的,内部方法调用不能被拦截。为此,您需要一个完整的AOP解决方案,如AspectJ,它可以是加载时编织,也可以是编译时编织。