spring事务源码分析

2019-04-06  本文已影响0人  StonyBlue
/**
* 1.事务管理由 TransactionInterceptor 拦截,执行invoke
* 2.调用 TransactionAspectSupport#invokeWithinTransaction 实现环绕通知
* 3.getTransaction>>doGetTransaction>>isExistingTransaction{
* return handleExistingTransaction
* }
* 4.if>>[PROPAGATION_REQUIRED || PROPAGATION_REQUIRES_NEW || PROPAGATION_NESTED]{
* doBegin 在此将创建Connection,如果Connection 为新创建,绑定到TransactionSynchronizationManager#bindResource(DataSource, ConnectionHolder);
* prepareTransactionStatus
* return
* }
* 5.prepareTransactionStatus 将当前事务事务绑定到本地线程
* 如果第四步没有执行,Connection 将由 DataSourceUtils#doGetConnection 创建,绑定到TransactionSynchronizationManager#bindResource(DataSource, ConnectionHolder)
* 6.执行ReflectiveMethodInvocation#proceed 如果抛出异常执行completeTransactionAfterThrowing处理
* 7.cleanupTransactionInfo
* 8.commitTransactionAfterReturning>TransactionManager#commit
*
* Created by ShiHui on 2016/1/9.
*/
详细解释:

git仓库地址

上一篇 下一篇

猜你喜欢

热点阅读