java AspectJ避免切入点间接调用自己
我有以下几点:
public aspect MyAspect {
before(String val): args(val, ..) &&
call(public * execute(java.lang.String, ..)) {
// Do something
}
}
以及以下课程A
&B
,A
使用B
:
class A() {
public void execute(String a) {
// Do something...
B b = new B();
b.execute();
}
}
class B {
public void execute(String a) {
// Do something
}
}
我有一个测试班:
public class TestClass {
public static void main(String[] args) {
A a = new A();
a.execute("someVal"); // I want the aspect to be called for the first execute only
B b = new B();
b.execute("someVal");
}
}
- 如果我们调用a.execute()我不希望在
B
上再次捕获执行方面李> - 另一方面,当我们从测试中直接调用b.execute()时,我确实希望方面捕获b.execute()李>
如何做到这一点?我试着用cflowbelow
(带否定),但没用
----编辑---
更准确地说,让我们以java的FilterChain.doFilter(..)
为例——过滤器可以调用其他过滤器。我只想捕捉对doFilter的第一个调用(我知道在fiter的情况下可以使用ThreadLocal
,但是filter只是一个例子)
# 1 楼答案
这样做可以: