Spring事务控制&编程式事务控制三大对象
1.Spring 支持两种类型的事务管理
-
编程式事务管理 :这意味着你在编程的帮助下有管理事务。这给了你极大的灵活性,但却很难维护。(自己使用Java的API写代码)
- 声明式事务管理 :这意味着你从业务代码中分离事务管理。你仅仅使用注释或 XML 配置来管理事务。(用配置的方式)
声明式事务管理比编程式事务管理更可取,尽管它不如编程式事务管理灵活,但它允许你通过代码控制事务。但作为一种横切关注点,声明式事务管理可以使用 AOP 方法进行模块化。Spring 支持使用 Spring AOP 框架的声明式事务管理。
2.编程式事务控制三大对象(了解)
2.1 PlatformTransactionManager
PlatformTransactionManager接口是spring的事务管理器,它里面提供了我们常用的操作事务方法
注意:
PlatformTransactionManager是接口类型,不同的Dao层技术则有不同的实现类,不同的Dao层实现技术控制事务的方式是不一样的,例如:Dao层技术是jdbc或mybatis时:org.springframework.jdbc.datasource.DataSourceTransactionManager;
Dao层技术是hibernate时:org.springframework.orm.hibernate5.HibernateTransactionManager
不管DataSourceTransactionManager还是HibernateTransactionManager都是PlatformTransactionManager接口的实现。方法给你固定好了,你自己去实现。
2.2 TransactionDefinition
TransactionDefinition是事务的定义信息对象,封装了控制事务的一些参数,里面有如下方法:
2.2.1 事务隔离级别
设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读
隔离级别如下:
2.2.2 事务的传播行为
传播行为的作用:
解决一个业务方法调用另一个业务方法时,它们之间事务统一性的问题。如,A业务方法调用B业务方法时,如果A和B事先都对它们进行事务控制,A在调B的时候,事务可能出现重复或者统一的问题。B看A有没有事务,下面的都是从这个角度来看
2.3 TransactionStatus
TransactionStatus接口提供的是事务具体的运行状态,该对象内部维护的信息是:维护在不同的时间点,这个事务的状态信息的,方法介绍如下:
2.4 编程式事务控制三个对象功能总结
PlatformTransactionManager和TransactionDefinition这两个对象不需要手动编程,但是这两个对象的一些信息,要在声明式,配置的时候告诉spring框架,而TransactionStatus对象是被动的封装事务信息的,随着程序的进行,事务内部的信息也会进行相应的改变,因此TransactionStatus对象的信息不需要通过配置的方式指定