我想创建一个切入点,以针对特定方法中的方法调用。
采取以下措施:
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
}
然而,这似乎并不奏效。有什么想法吗?
感谢
也许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());
在此处查找切入点参考
想一想,你想要的不是执行子句(这有一个额外的缺点,即需要为每个新的调用者添加),而是使用target,例如:
target(Child) && call(public void Parent.foo()).
令人惊讶的是,我发现eclipse文档中的切入点指南非常有用。他们在这里。