Aspectj 切入点表达式

Aspectj pointcut expression

我在构建 aspectJ 表达式时遇到问题。当从 class "Report".

调用任何 "QueryUtil" 方法时,我想 运行 我的建议

例如:如果我们在 Report.*() 中调用 QueryUtil.*() -> Advice 被执行。 如果我们从 AnyOtherClass.* 调用 QueryUtil.*() -> Advice 不会被执行。

一直在想cflow表达式,但是一直没有找到写法。我在想这样的事情:

<pointcut name="scope"
    expression="( cflow(call(* ext.demo.Report.\*(..))) && execution(* ext.demo.QueryUtil.*(..)))"/>

有人可以帮我吗?

你的切入点中唯一奇怪的是我在 cflow 切入点组件中看到 * 前面的流氓'\'。如果可以的话,我还建议使用 execution() 而不是 call() (通常有很多调用站点需要检测,但只有一个执行站点)。

cflow(execution(* ext.demo.Report.*(..))) && execution(* ext.demo.QueryUtil.*(..))

如果它不适合您,则将其分解以找出问题所在。 execution(* ext.demo.QueryUtil.*(..)) 是否符合您的所有期望? execution(* ext.demo.Report.*(..)) 是否符合您的所有期望? (我会用 -showWeaveInfo 来检查)