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.
精彩评论