Spring事务处理浅析
类层次结构
在Spring的事务处理模块中.可以看到的类层次结构如图:
可以看到,Spring事务处理模块是通过AOP功能来实现声明式事务处理的,比如事务属性的配置和读取,事务对象的抽象等。因此,在Spring事务处理中,可以通过设计一个
TransactionProxyFactoryBean
来使用AOP
功能,通过这个TransactionProxyFactoryBean
可以生成Proxy
代理对象,在这个代理对象中,通过Transactionlnterceptor
来完成对代理方法的拦截,正是这些AOP
的拦截功能,将事务处理的功能编织进来。在Spring事务处理中,在实现声明式事务处理时,这是AOP和IoC模块集成的部分。对于具体的事务处理实现,比如事
务的生成、提交、回滚、挂起等,由于不同的底层数据库有不同的支持方式,因此,在Spring事务处理中,对主要的事务实现做了一个抽象和适配。适配的具体事务处理器包括:对DataSource数据源的事务处理支持,对Hibernate数据源的事务处理支持,对JDO数据源的事务处理支持,对JPA和JTA等数据源的事务处理支持等。这一系列的事务处理支持,都是通过设计PlatformTransactionManager
,AbstractPlatforTransactionManager
以及一系列具体事务处理器来实现的,而PlatformTransactionManager
又实现了TransactionInterceptor
接口,通过这样一个接口实现设计,就把这一系列的事务处理的实现与前面提到的TransactionProxyFactoryBean结合起来,从而形成了一个Spring声明式事务处理的设计体系。
事务处理的实现过程
声明式事务处理的实现大致可以分为以下几个部分:
读取和处理在IoC容器中配置的事务处理属性,并转化为Spring事务处理需要的内部数据结构。具体来说,这里涉及的类是
TransactionAttributeSourceAdvisor
,从名字可以看出,它是一个AOP通知器,Spring使用这个通知器来完成对事务处理属性值的处理。处理的结果是,在IoC容器中配置的事务处理属性信息,会被读入并转化成TransactionAttribute
表示的数据对象,这个数据对象是Spring对事物处理属性值的数据抽象,对这些属性的处理是和TransactionProxyFactoryBean
拦截下来的事务方法的处理结合起来的。Spring事务处理模块实现统一的事务处理过程。这个通用的事务处理过程包含处理事务配置属性,以及与线程绑定完成事务处理的过程.Spring通过
Transactioninfo
和TransactionStatus
这两个数据对象,在事务处理过程中记录和传递相关执行场景。底层的事务处理实现。对于底层的事务操作,Spring委托给具体的事务处理器来完成,这些具体的事务处理器,就是在IoC容器中配置声明式事务处理时,配置的
PlatformTransactionManager
的具体实现,比如DataSourceTransactionManager
和HibernateTransactionManager
等。
具体的分析,这里就不说了,感兴趣的话可以以这个大致的思路去看源码。
Spring事务处理浅析相关推荐
- Spring事务处理流程和原理(动脑学院笔记)
一.事务理论 1.事务的特性 2.事务的隔离级别 3.事务的传播 4.利用数据库事务实现应用事务控制 要求:同一个事务需要同一个库的同一个连接. 5.单一数据源,如何让事务的所有操作使用同一连 ...
- Spring事务处理之 编程式事务 和 声明式事务
对事务概念还不了解的可以先看一下 MySQL事务管理(初步了解) 这篇文章 !!! Spring事务管理学习步骤: 1.掌握Spring事务属性 2.掌握Spring事务核心API 3.掌握Sprin ...
- Spring事务处理时自我调用的解决方案及一些实现方式的风险
前些日子一朋友在需要在目标对象中进行自我调用,且需要实施相应的事务定义,且网上的一种通过BeanPostProcessor的解决方案是存在问题的.因此专门写此篇帖子分析why. 1.预备知识 aop概 ...
- Spring事务处理,以及Spring事务的传播属性和隔离级别
本文转自:http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 事务的隔离级别:事务隔离级别用于处理多事务并发的情况,通常使用 ...
- spring事务浅析
事务分为编程式事务和声明式事务 声明式事务: import org.springframework.amqp.rabbit.annotation.EnableRabbit; import org.sp ...
- Spring AOP 浅析
AOP (Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是一种新的方法论 ...
- 【框架学习】spring 事务处理原理
事务详解 spring,中处理事务主要是由三个接口完成(对于不同持久层可能有各自的实现方式.) org.springframework.transaction.PlatformTransactionM ...
- Spring事务处理流程
这里讲述的是以@Transactional注解方式配置Spring事务的原理. 我们启用事务注解的时候,往往配置如下: <bean id="transactionManager&quo ...
- Spring 事务处理参数
这些标识最早是在EJB中定义的,你可以参考EJB的Transaction申明: 事务的属性和基本概念 Required: 如果在一个事务中调用,就把该方法加到此事务中来,如果还没有启动事务,就启动一个 ...
最新文章
- 从 Dropdown 的 React 实现中学习到的
- Centos6.8下搭建SVN服务器
- Linux /dev目录详解
- jwt的token自动续约_JWT(JSON Web Token)自动延长到期时间
- 全绿色版影视电影小程序源码-提供苹果CMS接口
- 有关两个jar包中包含完全相同的包名和类名的加载问题
- 网易云课堂测试微专业前置课
- 《OpenGL编程指南》一3.2 OpenGL缓存数据
- PHP+MYSQL图书管理系统(课设)
- 165. 小猫爬山(状压dp)
- [C#]文件中转站程序及源码
- VMWare Fusion 导入已有的虚拟机
- 2022环境电器年度行业分析报告:洗地机同比增长357%,扫地机器人销量197万+
- 百度网盘在电脑端取消自动续费
- ABAP对excel的操作(合并单元格,设置边框)
- 推荐基于4G模块打造的超低功耗4G摄像头通讯板
- python 打印/输出元素,用 逗号/空格 分隔
- IPhone 视图切换的的2种方法
- 解决QQ或者谷歌不能联网而其他浏览器能运行的问题
- 用ultraiso安装linux系统教程,U盘安装Ubuntu 10.04 Beta 1 (利用UltraISO制作LiveCD)
热门文章
- lol服务器维护8月7,lol维护公告最新_lol8月29日维护公告_lol今天维护到几点
- caffe-mnist别手写数字
- 2010-4-30 联通调整iPhone合约计划:裸机价直降千元
- SQL Server计算汉字笔画部首
- Java 一个关于魔兽世界5人小队的组合问题
- DPlot.v2.3.4.4 1CD DPlot适用于科学研究,工程技术的图表软件。用来显示2维,3维数据。...
- markdown中加竖线
- 八大基本数据类型、数组和包装类默认值
- NandFlash驱动源码详细分析
- 如何更改dev c++的格式 背景 ,让打代码更加高逼格