@AfterReturning方面在切入点方法的同一事务中执行?

时间:2016-09-09 07:36:48

标签: java spring hibernate transactions aspect

我需要在执行函数后执行任务。我已经使用了Aspect。但我有些困惑。

我在spring服务中有一个函数A()。

@Transactional(readOnly = false, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = {
 Exception.class
})
void A() {
 //Do Something
}

我对此功能有@Afterreturning方面。

 @AfterReturning(pointcut = "execution(Sevice.saverecord(..)) ")
 public void processNotifications(JoinPoint jp) {}

我想知道这个方面是否会使用metod A()的交易,或者它会自动创建一个新的交易。因为我没有在这个方面方法上定义任何交易。

我尝试在两个方法中使用TransactionAspectSupport.currentTransactionStatus()。toString()打印事务详细信息。我有两个不同的ID。

任何人都可以解释这是否意味着有两个交易,如果是第二笔交易来自何处?

1 个答案:

答案 0 :(得分:1)

@AfterReturning方面在与建议方法相同的事务中执行。

调用事务方法时的执行顺序如下图所示( ref - spring docs

Spring Transaction Flow

方面(即自定义顾问)可以配置为在事务通知之前或之后运行,默认情况下是之后的

有关如何配置自定义顾问程序以便在事务建议使用Ordered所述的here之前运行的进一步参考。