AspectJ切入特定方法中的方法调用

我想创建一个切入点来定位从特定方法调用方法。

采取以下措施:

class Parent { public foo() { //do something } } class Child extends Parent { public bar1() { foo(); } public bar2() { foo(); } public bar3() { foo(); } } 

我希望在方法bar1()和bar3()中对foo()的调用有一个切入点

我在想类似的东西

 pointcut fooOperation(): call(public void Parent.foo() && (execution(* Child.bar1()) || execution(* Child.bar3()) ); before() : fooOperation() { //do something else } 

然而,这似乎不起作用。 有任何想法吗?

谢谢

也许内部代码可以工作:

 call(public void Parent.foo()) && (withincode(* Child.bar1()) || withincode(* Child.bar3()) ); 

或者你可以尝试cflow切入点:

 pointcut bar1(): call(* Child.bar1()); pointcut bar3(): call(* Child.bar3()); call(public void Parent.foo()) && (cflow(bar1()) || cflow(bar3()); 

在这里查看切入点参考

认为你想要的不是执行执行子句(它有一个额外的缺点,即需要为每个新调用者添加),就是使用目标,例如:

 target(Child) && call(public void Parent.foo()). 

有点令人惊讶的是,我发现eclipse文档中的切入点指南非常有用。 他们在这里 。