是否可以在前通知中创建一个对象并将其传递给后通知?例如,如果我有以下方面:
public aspect LoggingAspect {
pointcut allMethods() : execution(* com.foo.Bar.*(..));
before() : allMethods() {
SomeObject foo = makeSomeObject();
}
after() : allMethods() {
// access foo?
}
}
我无法直接引用 foo
因为它不在范围内(触发编译器错误)。是否有一些上下文可供我在其中存储 foo
的建议使用?
背景:我打算创建一个唯一标识符来引用该方法的特定调用,并且我需要在两个建议中访问它,因为我会将其包含在日志输出中。
在我建议的类中存储参数不是一个选项(因为我希望它不知道建议)。
最佳答案
您可以将其存储在成员变量中,但是您必须考虑线程安全。相反,我强烈建议使用 around
建议。
Object around() : allMethods() {
SomeObject foo = makeSomeObject();
Object ret = proceed();
foo.magic();
return ret;
}
关于java - 在建议之前和之后传递对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23339457/