spring 事务源码分析
2016-10-10 15:11
429 查看
xml配置方式使用事务
解释几个配置
mode 可以使用proxy和aspectj,默认是proxy,下面讲的都是默认的情况,即proxy
TxNamespaceHandler#init方法注册了AnnotationDrivenBeanDefinitionParser,
AnnotationDrivenBeanDefinitionParser
AnnotationDrivenBeanDefinitionParser注册了InfrastructureAdvisorAutoProxyCreator以及下面所示3个类
![](https://img-blog.csdn.net/20161011140753091?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
注:其实aop配置与事务配置共存的状态下不会使用InfrastructureAdvisorAutoProxyCreator,参考http://blog.csdn.net/u011686226/article/details/52785420
BeanFactoryTransactionAttributeSourceAdvisor
![](https://img-blog.csdn.net/20170215115528400?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTY4NjIyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
AnnotationTransactionAttributeSource
![](https://img-blog.csdn.net/20170215114610699?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTY4NjIyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
AnnotationTransactionAttributeSource就是解析事务的属性,通过getTransactionAttribute方法返回一个TransactionAttribute
TransactionInterceptor
TransactionInterceptor就是真正执行事务的地方,
DataSourceTransactionManager#doGetTransaction
获取事务,返回DataSourceTransactionObject(对于DataSourceTransactionManager)
![](https://img-blog.csdn.net/20170215135052761?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTY4NjIyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
DataSourceTransactionObject包含了一个ConnectionHolder,这个ConnectionHolder是从当前线程获取的(利用threadlocal)
(ConnectionHolder) TransactionSynchronizationManager.getResource(this.dataSource);
DataSourceTransactionManager#isExistingTransaction
判断是否已经存在事务,利用ConnectionHolder#transactionActive属性
AbstractPlatformTransactionManager#handleExistingTransaction
对于已经存在的事务处理,比如挂起,或者在同一个事务执行,要看具体配置
AbstractPlatformTransactionManager#suspend
事务的挂起
<tx:annotation-driven transaction-manager="sqlTransactionManager" proxy-target-class="true" />
解释几个配置
mode 可以使用proxy和aspectj,默认是proxy,下面讲的都是默认的情况,即proxy
TxNamespaceHandler#init方法注册了AnnotationDrivenBeanDefinitionParser,
registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
AnnotationDrivenBeanDefinitionParser
AnnotationDrivenBeanDefinitionParser注册了InfrastructureAdvisorAutoProxyCreator以及下面所示3个类
注:其实aop配置与事务配置共存的状态下不会使用InfrastructureAdvisorAutoProxyCreator,参考http://blog.csdn.net/u011686226/article/details/52785420
BeanFactoryTransactionAttributeSourceAdvisor
AnnotationTransactionAttributeSource
AnnotationTransactionAttributeSource就是解析事务的属性,通过getTransactionAttribute方法返回一个TransactionAttribute
TransactionInterceptor
TransactionInterceptor就是真正执行事务的地方,
DataSourceTransactionManager#doGetTransaction
获取事务,返回DataSourceTransactionObject(对于DataSourceTransactionManager)
DataSourceTransactionObject包含了一个ConnectionHolder,这个ConnectionHolder是从当前线程获取的(利用threadlocal)
(ConnectionHolder) TransactionSynchronizationManager.getResource(this.dataSource);
DataSourceTransactionManager#isExistingTransaction
判断是否已经存在事务,利用ConnectionHolder#transactionActive属性
AbstractPlatformTransactionManager#handleExistingTransaction
对于已经存在的事务处理,比如挂起,或者在同一个事务执行,要看具体配置
AbstractPlatformTransactionManager#suspend
事务的挂起
相关文章推荐
- Spring实现事务源码分析
- spring源码分析之——spring 事务管理实现方式 (不太清晰,不明白aop会看不懂)
- Spring Corbar事务源码 以及连接泄露分析
- Spring编程式事务与声明式事务源码分析
- spring事务源码分析结合mybatis源码(三)
- Spring事务源码分析
- Spring事务源码分析
- (十)Spring事务处理 - IoC容器的事务处理源码分析
- Spring 事务源码分析——Hibernate篇
- Spring源码分析--@Autowired注入的不是代理对象,导致事务回滚失败(@Transactional无效)
- Spring事务管理源码分析
- spring事务源码分析结合mybatis源码(一)
- Spring 注解事务处理流程源码分析
- spring源码分析之——spring 事务管理实现方式
- spring事务源码分析结合mybatis源码(二)
- 从源码分析 Spring 基于注解的事务
- mybatis源码分析(8)-----事务(mybatis管理、spring管理)
- 全面分析 Spring 的编程式事务管理及声明式事务管理(1)
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读