这很难解释,但我想在AspectJ中定义一个像这样的函数调用的切入点:
public class B{
public A a;
}
public class A{
public void foo(){...}
}
并且切入点应截取以下调用:
B.a.foo();
我还没有想出办法(如果有的话)。你们有什么想法吗?
提前致谢
答案 0 :(得分:2)
我自己也是一名AspectJ新手,但我觉得这是不可能的。即使你设计了一个匹配B.a.foo()
的切入点,你仍然需要以某种方式处理以下情况:
A a = b.a;
a.foo();
甚至
public void fooA(A aToFoo) { aToFoo.foo(); }
public void whatever(B someB) { fooA(someB.a); }
答案 1 :(得分:0)
您可以定义一个切入点来捕获对公共字段的任何引用,但是AFAIK您无法创建一个将字段引用与该引用上的方法调用相结合的切入点。
答案 2 :(得分:0)
正如其他人所提到的,这在AspectJ中是不可能的。然而,AspectJ的一些研究扩展引入了tracecuts,这是一种新的切入点,能够完全按照你的要求进行操作。我不相信有任何生产准备好的实现,但您可能有兴趣阅读它。这里有一篇好文章: