如何定义一个切入点来挑选指定方法调用的所有方法?

How to define a Pointcut to pick out all methods invoked by the specified method?

有什么方法可以在 AspectJ 中定义一个切入点,它会挑选出由指定方法直接执行的每个方法吗?

例如,如果 classA 中有一个 parentMethod(),它看起来像:

public void parentMethod() {
    classB.methodX();
    classC.methodY();
}

我想定义一个切入点,该切入点仅使用有关 parentMethod 的信息来选择何时执行其调用的方法 methodX()methodY()。有没有办法使用 AspectJ 切入点实现此目的?

我想我们不是在谈论继承,所以你不应该称它为“父方法”。你只是指一个调用其他方法的方法,不是吗?不管怎样,关于你的问题:

与原生 AspectJ 的 cflow()cflowbelow() 切入点相比,使用 Spring AOP 表达控制流切入点的方式有限。在你的情况下,如果你想坚持使用基于代理的 Spring AOP,一个 ControlFlowPointcut 可能就足够了,因为你不需要任何方法名称模式,但似乎有一个固定的方法名称作为你的目标.欲了解更多信息,请参阅:

  • 的“更新 2”部分,提供有关 ControlFlowPointcut 的资源的基本指针。
  • ,如果您想将方法模式与自定义 MultiMethodControlFlowPointcut 匹配(目前 Spring 仍然不受开箱即用的支持)。
  • Spring 手册章节 "Using AspectJ with Spring Applications" 解释了如何配置 Spring 以通过加载时织入 (LTW) 使用本机 AspectJ。
  • 如果您决定采用原生 AspectJ LTW 方式,AspectJ 手册中关于 control-flow-based pointcuts 的部分简要说明了 cflowcflowbelow