【问题标题】:AspectJ - @Before, method and threadAspectJ - @Before,方法和线程
【发布时间】:2020-07-12 20:52:08
【问题描述】:

在 AspectJ 中:

@Before("execution(method_a)")
public void method_b() {
}
@Before("execution(method_a)")
public void method_c() {
}
  1. method_a 和 method_b 是否必须具有相同的 threadId?
  2. 如果method_b和method_c并行运行,method_a是线程安全的吗?

非常感谢

【问题讨论】:

    标签: multithreading aop aspectj


    【解决方案1】:

    免责声明:我在这里真正谈论的是 AspectJ,因为您这样问,不是关于 Spring AOP。

    答案是:AspectJ 检测 Java 字节码,但不在自己的线程中运行。 method_bmethod_c 的建议都将在与 method_a 相同的线程中运行(名字的选择很糟糕,顺便说一句),除非您从建议中启动自己的线程。

    关于指向同一个joinpoint的两个advice的执行顺序,如果两个advice在不同方面,可以通过@DeclarePrecedence选择。如果它们在同一方面,则顺序如here所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多