Loushang+spring事物

1父类BaseService默认写了TransactionTemplate的get和set方法

Loushang+spring事物

2子类实现了注入

Loushang+spring事物

jdbcTransactionTemplate就是BaseService中的TransactionTemplate

Loushang+spring事物

3子类实现事物的调用

Loushang+spring事物

4获取事物模板

getTransactionTemplate()方法是继承BaseService的获取TransactionTemplate的get方法。

Execute()方法是TransactionTemplate中的执行方法。

Loushang+spring事物

5获取execute方法的参数

Execute()要求的参数是TransactionCallback action

TransactionCallback 是接口

Loushang+spring事物

所以传参必须实现接口

6实现TransactionCallback

我们的传参为new TransactionCallbackWithoutResult()

TransactionCallbackWithoutResult 抽象类

Loushang+spring事物

7实例化抽象方法

我们要实例化TransactionCallbackWithoutResult必须实例化抽象类中的抽象方法

即doInTransactionWithoutResult(TransactionStatus var1)方法

Loushang+spring事物

8参数TransactionStatus

doInTransactionWithoutResult(TransactionStatus var1)在excute方法里实现调用,所以他的参数TransactionStatus var1也是在excute方法里传递的

Loushang+spring事物

9分析excute方法-transactionManager

Loushang+spring事物

this.transactionManager来自于配置文件的注入

Loushang+spring事物

this.transactionManager = jdbcTransactionManager

jdbcTransactionManager其实是DataSourceTransactionManager

Loushang+spring事物

所以这里是false,走else方法

10执行doInTransaction

Loushang+spring事物

如有异常则走回滚方法

rollbackOnException

11事物提交commit

this.transactionManager.commit(status);

实际上是DataSourceTransactionManager里面的doCommit方法,即jdbc驱动里面的提交事物方法

Loushang+spring事物

12整体类图

Loushang+spring事物

描述:

1PortraitService继承BaseService

2PortraitService调用事务模板TransactionTemplate的excute方法

3TransactionTemplate调用TransactionCallBack的回调方法doInTransaction

4TransactionTemplate调用平台事务管理PlatformTransactionManager的commit和rollback方法

5数据源事物管理器DataSourceTransactionManager继承PlatformTransactionManager,引用数据源DataSource,实现真正的提交和回滚