为什么Spring Tx不使用AspectJ作为默认的AOP分辨率

时间:2019-12-20 08:14:41

标签: java spring spring-transactions

我知道Spring使用动态代理或cglib作为AOP解析。当我使用Spring事务时,我必须公开一个@Transactional方法,如果从内部方法调用声明性事务,则该声明事务将不起作用。我知道内部调用会绕过代理,而AspectJ是运行时解析,这在性能上有缺点。


因此,如果我在A.nonTxMethod()中调用A.txMethod(),则我有2种解决方案来获取A.txMethod()工作上的@Transactional注释:

  1. 从外部bean B调用@Transactional方法A.txMethod()
  2. 将A的代理A'自动连接到A本身,然后调用A..txMethod()而不是this.txMethod()
  3. 启用AspectJ,这会导致性能下降

谁能告诉我应该选择哪种解决方案?解决方案1或2似乎不是一个好主意,所以我应该使用解决方案3还是第四解决方案?

0 个答案:

没有答案