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

时间:2011-06-28 00:23:15

标签: java 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
}
然而,这似乎不起作用。任何想法?

感谢

2 个答案:

答案 0 :(得分:3)

也许withincode可行:

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());

在这里查看pointcut reference

答案 1 :(得分:2)

想想你想要的是而不是执行执行子句(其另外的缺点是需要为每个新调用者添加),就是使用目标,例如:类似的东西:

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

有些令人惊讶的是,我发现eclipse文档中的切入点指南非常有用。它们是here