《Spring技术内幕:深入解析Spring架构与设计原理》笔记之六(Spring事务处理的实现)

本文深入探讨Spring框架如何简化事务管理,介绍Spring事务处理模块的设计原理、应用场景及其实现细节,包括声明式事务处理的配置与读取过程、事务拦截器的设计与实现、编程式事务管理的使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Spring与事务处理

有了Spring事务管理的支持,只需要通过一些简单的配置,应用就能完成复杂的事务处理工作,从而为用户使用事务处理提供很大的方便。

2.Spring事务处理的设计概览

Spring事务处理模块中的类层次结构


在Spring事务处理中,可以通过设计一个TransactionProxyFactoryBean来使用AOP功能,通过这个TransactionProxyFactoryBean可以生成Proxy代理对象,在这个代理对象中,通过TransactionInterceptor来完成对代理方法的拦截,正是这些AOP拦截功能,将事务处理的功能编织进来。在Spring事务处理中,在实现声明式事务处理时,这是AOP和IOC模块集成的部分。在Spring事务处理中,对主要的事务实现做了一个抽象和适配。适配的具体事务处理器包括:对DataSource数据源的事务处理支持,对Hibernate数据源的事务处理支持,对JDO数据源的事务处理支持,对JPA和JTA等数据源的事务处理支持。这一系列事务处理支持,都是通过设计PlatformTransactionManager、AbstractPlatforTransactionManager以及一系列具体事务处理器来实现,而PlatformTransactionManager又实现了TransactionInterceptor接口,通过这样一个接口实现设计,就把这一系列的事务处理的实现与前面提到的TransactionProxyFactoryBean结合起来,从而形成了一个Spring声明式事务处理的设计体系。

3.Spring事务处理的应用场景

Spring为常用的数据源的事务处理支持提供一系列的TransactionManager。

4.Spring声明式事务处理

4.1设计原理和基本过程

声明式事务处理的步骤:

  • 读取和处理在IOC容器中配置的事务处理属性,并转换为Spring事务处理需要的内部数据结构。
  • Spring事务处理模块实现统一的事务处理过程。这个通用的事务处理过程包含处理事务配置属性,以及与线程绑定完成事务处理的过程,Spring通过TransactionInfo和TransactionStatus这两个数据对象,在事务处理过程中记录和传递相关执行场景。
  • 底层的事务处理实现。对于底层的事务操作,Spring委托给具体的事务处理器来完成,这些具体的事务处理器,就是在IOC容器中配置声明式事务处理时,配置的platformTransactionManager的具体实现,比如DataSourceTransactionManager和HibernateTransactionManager等。

4.2实现分析

1.事务处理拦截器的配置

建立事务处理对象的时序图


在建立TransactionProxyFactoryBeans的事务处理拦截器的时候,首先需要对ProxyFactory对象,从而实现AOP的使用。

2.事务处理配置的读入

这个为事务处理服务的TransactionAttributeSourcePointcut的matches方法实现中,首先把事务方法的属性配置读取到TransactionAttributeSource对象中,有了这些事务处理的配置以后,根据当前方法调用的Method对象和目标对象,对是否需要启动事务处理拦截器进行判断。

3.事务处理拦截器的设计与实现

事务提交的时序图


在这个invoke()方法的实现中,可以看到整个事务处理在AOP拦截器中实现的全过程。同时,它也是spring采用AOP封装事务处理和实现声明式处理的核心部分。

5.Spring事务处理的设计和实现

5.1Spring事务处理的编程式使用

这个编程式使用事务管理的过程中,没有看到框架特性的使用,非常简单和直接,很好地说明了事务管理的基本实现过程,以及在Spring事务处理实现中涉及一些主要的类,比如TransactionStatus、TransactionManager等,对这些类的使用与声明式事务处理的最终实现是一样的。

5.2事务的创建

作为声明式事务处理实现的起始点,需要注意TransactionInterceptor拦截器的invoke回调中使用的createTransactionIfNecessary方法,这个方法是在TransactionInterceptor的基类TransactionAspectSupport中实现的。

调用createTransactionIfNecessary的时序图


5.3事务的挂起

5.4事务的提交

5.5事务的回滚

6.Spring的事务处理器的设计与实现

6.1Spring事务处理的应用场景

Spring事务管理器的类设计


6.2DataSourceTransactionManager的实现

如果使用DataSource创建事务,最终通过设置Connection的AutoCommit属性来对事务处理进行配置。

实现DataSourceTransactionManager的时序图


使用DataSourceTransactionManager实现事务创建、提交和回滚的过程,基本上与单独使用Connection实现事务处理是一样的,也是通过设置autoCommit属性,调用Connection的commit和rollback方法来完成的。

6.3HibernateTransactionManager的实现

HibernateTransactionManager实现事务处理的时序图




×××总共两个zip文件;7zip压缩 ×××Spring 技术内幕.zip.001 ×××Spring 技术内幕.zip.002 本书是spring领域的问鼎之作,由业界拥有10余年开发经验的资深java专家亲自执笔!java开发者社区和spring开发者社区一致强烈推荐。.    国内第一本基于spring3.0的著作,从源代码的角度对spring的内核和各个主要功能模块的架构设计实现原理进行了深入剖析。你不仅能从木书中参透spring框架的优秀架构设计思想,而且还能从spring优雅的实现源码中一窥java语言的精髓。此外,本书还展示了阅读源代码的卓越方法,不仅授你以鱼,而且还授你以渔!..    如果你以一种淡定的心态翻开这本书,无论你是java程序员、spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从本书中受益。    作者从业10余载,悟透spring等开源软件的本质,权威性毋庸置疑。    java开发者社区、专业spring开发者社区和架构师社区一致鼎力推荐!    深入解析spring架构原理设计思想,探究spring成功的奥秘。    揭开spring源代码的神秘面纱,展示系统阅读开源软件源代码的方法和秘诀。    掌握spring架构原理设计思想真的能让开发者如虎添翼吗?    ioc容器如何掌控以pojo为基础的bean对象?它的轻量级开发设计思想是如何实现的?    spring产品级的ioc容器是如何作为一个完整的系统实现并运行的?它如何启动?如何完成bean的解析和载入?又如何实现bean的生命周期管理?    spring如何简捷地在jvm上实现aop功能?    spring aop如何实现aspect编织功能?    spring如何实现各种数据库操作组件的集成?    spring如何在web环境中集成ioc容器并为web应用开发提供利器?    我们耳熟能详的mvc模式在spring中是如何实现的?    spring mvc如何灵活地集成各种丰富的视图展现方案?    spring实现远端调用的方案有很多种,你知道它们之间的优劣差异吗?    spring acegi安全框架在用户验证和授权机制的实现上有何过人之处?    如何在spring的基础上进行扩展开发?    你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值