我有以下方面:
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");
}
}
如何实现这一目标?我尝试使用cflowbelow(带否定),但它没有用。
----编辑----
更准确地说,让我们使用java的FilterChain.doFilter(..) - 过滤器可以调用其他过滤器。我只想抓住对doFilter的第一次调用(我知道在fiter的情况下可以使用ThreadLocal来完成,但过滤器只是一个例子)。
谢谢,
林
答案 0 :(得分:3)
这对我有用:
adapter = new SQLiteDataAdapter();
selcmd = new SQLiteCommand();
selcmd.CommandText = "...";
adapter.SelectCommand = selcmd;
upcmd = new SQLiteCommand();
upcmd.CommandText = "...";
adapter.UpdateCommand = upcmd;
delcmd = new SQLiteCommand();
delcmd.CommandText = "...";
adapter.DeleteCommand = delcmd;
inscmd = new SQLiteCommand();
inscmd.CommandText = "...";
adapter.InsertCommand = inscmd;
不知道它是否符合您的要求。