我需要在执行函数后执行任务。我为此使用了 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) {}
我想知道这个方面是否会使用方法A()的事务,或者它会自动创建一个新事务。因为我没有在这方面方法上定义任何事务。
我尝试在两种方法中使用 TransactionAspectSupport.currentTransactionStatus().toString() 打印交易详细信息。我得到了两个不同的 ID。
有人能解释一下这是否意味着有两笔交易,如果是的话,第二笔交易来自哪里?
Yes the @AfterReturning
方面与建议方法在同一事务中执行。
调用事务方法时的执行顺序如下图所示(参考弹簧docs http://docs.spring.io/autorepo/docs/spring/current/spring-framework-reference/html/transaction.html#tx-decl-explained)
方面(即定制顾问) 可以配置为在事务建议之前或之后运行,默认情况下是after.
有关如何配置自定义顾问程序以在事务建议之前运行的进一步参考,请使用Ordered http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/Ordered.html如上所述here http://docs.spring.io/autorepo/docs/spring/current/spring-framework-reference/html/transaction.html#transaction-declarative-applying-more-than-just-tx-advice.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)