java - 在建议之前和之后传递对象?

标签 java aop aspectj

是否可以在前通知中创建一个对象并将其传递给后通知?例如,如果我有以下方面:

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/

相关文章:

java - AspectJ EDT-Checker 代码问题

JAVA 如何将颜色从一个缓冲图像复制到另一个缓冲图像

java - 如何使用 google map api 在基于 map 的应用程序上添加元素?

java - 约束不起作用?

java - 启用 spring aop 回避依赖注入(inject)

java - 使用带有 JavaConfig 的 Spring IoC 配置 AspectJ 方面?

java - 我想连接到java上的数据库,但有一些错误

c# - 如何为 Unity 中的所有注册类型配置日志拦截器?

java - 如何从其他项目中存在的类文件获取输入流

Java Spring AOP 记录器