【问题标题】: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() {
}
- method_a 和 method_b 是否必须具有相同的 threadId?
- 如果method_b和method_c并行运行,method_a是线程安全的吗?
非常感谢
【问题讨论】:
标签:
multithreading
aop
aspectj
【解决方案1】:
免责声明:我在这里真正谈论的是 AspectJ,因为您这样问,不是关于 Spring AOP。
答案是:AspectJ 检测 Java 字节码,但不在自己的线程中运行。 method_b 和 method_c 的建议都将在与 method_a 相同的线程中运行(名字的选择很糟糕,顺便说一句),除非您从建议中启动自己的线程。
关于指向同一个joinpoint的两个advice的执行顺序,如果两个advice在不同方面,可以通过@DeclarePrecedence选择。如果它们在同一方面,则顺序如here所述。