spring底层的事务实现就依赖如下的三个接口:
可以看到事务管理器PlatfromTranscationManger这个接口里的三个事务相关的方法依赖于TransactionStatus 和 TransactionDefinition这两个接口,所以上面说的是事务实现与这三个接口相关
PlatfromTranscationManger只是一个接口,根据dao层的不同的框架,有不同的事务管理器的实现,我们常用的就是dao层基于jdbc或者ibatis的DataSourceTransactionManager
TransactionDefinition :在方法中都是加事务,但是事务的属性可以不一样,比如事务可以设置不同的隔离级别,可以设置不同的事务传播行为,可以设置成只读等等
transaction
Spring支持两种方式事务管理
-
编程式的事务管理(在原有代码的基础上进行修改,这就没有体现切面)
2.声明式事务,分为使用XML或注解配置
具体案例
transfer方法执行途中如果有异常的话,就需要进行回滚,但是很明显这个时候并没有加事务的控制,所以导致钱转出来了,但是别人没有收到
-
方式一 XML配置方式来实现事务控制
理解一下事务通知:如下的事务通知配置,也就是说都是加事务,但是事务的属性可以不一样(TransactionDefinition ),以get开头的所有方法的所加的事务都是只读的,以add开头的所有的方法的不是只读的,隔开级别是可重复读等等
-
方式二 基于注解的方式实现事务控制