Loushang+spring事物
1父类BaseService默认写了TransactionTemplate的get和set方法
2子类实现了注入
jdbcTransactionTemplate就是BaseService中的TransactionTemplate
3子类实现事物的调用
4获取事物模板
getTransactionTemplate()方法是继承BaseService的获取TransactionTemplate的get方法。
Execute()方法是TransactionTemplate中的执行方法。
5获取execute方法的参数
Execute()要求的参数是TransactionCallback action
TransactionCallback 是接口
所以传参必须实现接口
6实现TransactionCallback
我们的传参为new TransactionCallbackWithoutResult()
TransactionCallbackWithoutResult 抽象类
7实例化抽象方法
我们要实例化TransactionCallbackWithoutResult必须实例化抽象类中的抽象方法
即doInTransactionWithoutResult(TransactionStatus var1)方法
8参数TransactionStatus
doInTransactionWithoutResult(TransactionStatus var1)在excute方法里实现调用,所以他的参数TransactionStatus var1也是在excute方法里传递的
9分析excute方法-transactionManager
this.transactionManager来自于配置文件的注入
即this.transactionManager = jdbcTransactionManager
jdbcTransactionManager其实是DataSourceTransactionManager
所以这里是false,走else方法
10执行doInTransaction
如有异常则走回滚方法
rollbackOnException
11事物提交commit
this.transactionManager.commit(status);
实际上是DataSourceTransactionManager里面的doCommit方法,即jdbc驱动里面的提交事物方法
12整体类图
描述:
1PortraitService继承BaseService
2PortraitService调用事务模板TransactionTemplate的excute方法
3TransactionTemplate调用TransactionCallBack的回调方法doInTransaction
4TransactionTemplate调用平台事务管理PlatformTransactionManager的commit和rollback方法
5数据源事物管理器DataSourceTransactionManager继承PlatformTransactionManager,引用数据源DataSource,实现真正的提交和回滚