开发者

AspectJ pointcut to method call in specific methods

开发者 https://www.devze.com 2023-03-15 15:51 出处:网络
I want to create a pointcut to target a call to a met开发者_如何学JAVAhod from specific methods.

I want to create a pointcut to target a call to a met开发者_如何学JAVAhod from specific methods.

take the following:

class Parent {
   public foo() {
     //do something
   }
}

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

I would like to have a point cut on the call to foo() in methods bar1() and bar3()

I was thinking something like

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

before() : fooOperation() {
  //do something else
}

however, that doesnt seem to work. any ideas?

thanks


Maybe withincode will work:

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

Alternatively you could try the cflow pointcut:

pointcut bar1(): call(* Child.bar1());
pointcut bar3(): call(* Child.bar3());

call(public void Parent.foo()) && (cflow(bar1()) || cflow(bar3());

Look here for a pointcut reference


Think what you want is instead of doing the execution clauses (which have the added disadvantage of requiring additions for each new caller), is to use target, e.g. something like:

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

Somewhat surprisingly, I have found the pointcut guides in the eclipse documentation quite useful. They are here.

0

精彩评论

暂无评论...
验证码 换一张
取 消