我想创建一个切入点来定位从特定方法调用方法。
采取以下措施:
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
}
然而,这似乎不起作用。任何想法?
感谢
答案 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。