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.
*/
详细解释:
-
TransactionInterceptor
- 是使用AOP实现声明式事务处理的拦截器,封装了Spring对声明式事务处理的实现。 -
TransactionAttributeSource
和TransactionAttribute
- 这里封装对声明式事务处理属性的识别,信息的读入和配置 -
TransactionInfo
,TransactionStatus
- 这是事务处理信息存放的主要地方,而且是和线程绑定的。 - 然后就是
TransactionManager
, 通过使用TransactionInfo和- -TransactionStatus
来控制事务处理 - 中间的一些和具体事务处理器无关的操作封装到AbstractPlatformTransactionManager
里面实现了。 - 对编程式的事务处理TransactionDefinition是定义事务属性的类,Spring提供了DefaultTransactionDefinition供用户使用。
- xml配置信息类
NameMathTransactionAttribute
- 注解信息类
AnnotationTrancationAttributeSource