编程式事务的实现代码
代码就写好了
1、代码中注入这个模板类,2、配置文件中配置service bean里面加上这个属性
到这里我们程序可以进行事务的控制了,但是直接使用会比较麻烦,所以spring提供了对应的事务模板类TransactionTemplate来;
把事务管理器注入进来
jdbc里面事务管理是怎么进行管理的?是获取到connection,然后调用connection.setAutoCommit(false),不让它自动提交,而是交给我们程序来控制。那么这里谁能获取到connection对象呢,C3P0连接池,所以要注入datasource
编程式的事务控制
22222222222222222222222222222222
2222222222222222222222
转账案例的环境准备
编程式事务管理 transcationTemplet,excute()
编程式事务管理
Spring为简化编写代码,提供了事务管理模板TransactionTemplate,TransactionTemplate依赖DataSourceTransactionManager(使用SpirngJDBC时事务的管理类,它是PlatformTransactionManager接口的实现类),DataSourceTransactionManager依赖DataSource(例如service需要使用事务,只需要在service中注入改模板即可,JDBC是通过Connection对象来对事务进行管理,而SpringJDBC配置事务时也需要这样的对象进行管理,这里是在配置事务管理器DataSourceTransactionManager的bean标签里来注入连接池实现的,如图)。
配置事务管理器
配置事务管理器模板
编程式事务管理就是在需要使用事务的地方手动编写代码,所以需要在Service层里注入该模板,这时Service调用Dao中的两个方法就处于同一个事务中了。
通过模板的方法就可以实现业务回滚,execute(TransactionCallBack<T> transactionCallBack),TransactionCallBack实际是一个接口,可以手动创建一个类实现给接口,在传入该对象。也可以使用匿名内部类的形式,匿名内部类的方法里就可以进行事务的操作了,该方法里的参数是事务的状态对象,而且一个方法里的参数中匿名内部类想使用外部传入的参数,需要使用final修饰该参数。如下图
编程式的事务管理,需要在application.xml 文件配置对应的 配置模板,
主要配置的有
①通用且默认的配置事务管理器: org.springframeword.jdbc.datasource.DataSourceTransactionManager
②专属编程式事务管理的由Spring 提供的类:
org.springframeword.ransaction.support.TransactionTemplate
③并在业务层的配置中添加注入事务管理的模板:
<property name ="transactionTemplate" ref="transactionTemplate">
编程式事务管理的业务实现层,注入TransactionTemplate 的bean实例并 执行 execute(new TransationCallbackWithoutResult({
重写doInTransactionWithoutResult(TransactionStatus ) 方法,并在该方法中实现具体的业务逻辑代码
@Override
protected 。。。。。。。。。。
}))
业务类
注入事务管理的模板
transactionTemplate.execute()
doInTransactionWithoutResult(TransactionStatus transactionStatus)
配置文件 1-2
在业务层类中注入事务管理的模板
配置文件 1-1
配置事务管理器、配置事务管理的模板
编程式的事务控制
编程式的事务管理
Spring提供了事务管理的模板,该模板简化了事务管理的代码,事物管理模板注入到需要事务管理的类中,事务管理模板中真正进行事物管理的是事务管理器
在方法中调用事务管理模板的execute方法,new一个匿名内部类TransactionCallbackWithoutResult,在该类的doInTransactionWithoutResult方法中加入事物
编程式事务管理: 内部类中使用了外部变量, 需要将外部变量修改为final类型的变量.
编程式事务管理: TransactionTemplate(事务管理的模板) -> transactionManager(事务管理器)
编程事务控制
单元测试。
编程式事务管理2
编程式事务管理:TransactionTemplate
转账案例的环境准备
编程式事务管理
在AccountService使用TransactionTemplate,使用TransactionCallback类及其子类
TransactionTemplate依赖DataSourceTransactionManager
DataSourceTransactionManager依赖DataSource构造;