Spring架构揭秘-声明式事务
程序员文章站
2022-05-21 09:32:37
...
1、声明式事务原理
2、Spring事务模块结构及解析
一、声明式事务原理
在日常的开发中经常会使用到事务,比如在新增纪录的方法里,通常会先开启事务,然后再提交事务,遇到异常就回滚事务,事务代码都是模版型的,写起来很烦,但是又不能不写。这正好符合AOP的应用范围,Spring天然的支持AOP,于是伟大的声明式事务就这么诞生了。通过XML或注解的方式配置事务,标明在哪个类,那个方法需要使用事务即可。
二、Spring事务模块结构及解析
Spring对事务管理做了高级抽象,分为3个部分,分别是事务定义,事务状态,事务管理器。
Spring通过解析XML和Annotation里事务的配置产生TransactionDefinition对象供PlatformTransactionManager使用,同时TransactionStatus封装了事务的状态信息。TransactionDefinition中封装了事务隔离级别和事务传播特性的属性。
Spring对事务管理做了高度的抽象,这样就给不同的数据层框架提供了相同的管理方式,从PlatformTransactionSynchronizeManager的子类图中可以看出,Spring默认提供几种常见数据层框架的事务管理实现类。
DataSourceTransactionManager:使用JDBC或ibates等使用Datasource数据源持久化时,使用的事务管理器
HibernateTransactionManager:使用Hibernate时使用的事务管理器,对于不同版本的Hibernate有不同的管理器
JdoTransactionManager:使用JDO进行持久化时使用的事务管理器
JpaTransactionManager:使用JPA进行持久化时使用的事务管理器
JtaTransactioinManager:具有多个数据源的全局事务使用的事务管理器
Spring将JDBC的Connection、Session等都统称为资源,这些资源都是在同一时刻不能线程共享的,为了让Dao,Service类做到Singleton,Spring提供了事务同步管理器,内部通过TrheadLocal为每一个线程提供资源副本,同时维护事务属性和运行状态信息,在Spring的事务管理机制中有着地基级别的作用,无论是声明式事务还是编程式编程都离不开他。下面就看看他的结构