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

我有以下课程

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。如果是这样,有效的解决方法是什么?

我尝试将pointcutannotations一起使用,但这也不起作用。

ldsfh 回答:具有超级方法调用的继承方法的切入点

1如有疑问,请始终退回到完全硬编码的切入点,然后再次进行操作:

execution(private void helpMe())

您确定自己是using AspectJ而不是普通的Spring AOP(它不能建议使用私有方法)吗?


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

  

call连接点无法捕获对非静态方法的超级调用

...不适用于execution

本文链接:https://www.f2er.com/3110377.html

大家都在问