一、没有添加事务的实现
1、实体类:
2、Dao:
3、Service:
4、XML文件配置:
5、测试:
6、结果:
没有事务管理,所以异常上面的代码成功执行,下面的代码不执行,导致钱转出去了,没收到,总金额少了!
二、编程式事务实现
1、XML配置事务:在applicationContext.xml中添加事务管理器和事务管理器模版的配置
2、注解方式配置事务:注解方式配置事务管理器和事务管理器模版
3、修改UserService,使用编程式事务完成事务管理:
我们将原子性业务实现代码全部放在配置的事务中:
4、再测试:
5、结果:
我们再次测试,因为所有的业务代码放入了事务类中执行,所以整体具有原子性,不会出错!
三、声明值事务实现
1、基于AspectJ XML方式:我们可以删除之前applicationContext.xml中的事务管理模版的配置,添加事务定义的配置和AOP的配置:
2、将业务类的方法改回原来的方式:
3、结果:
因为我们通过配置AOP实现切点方式织入,就会对对应类下对应方法实现事务处理,不会出错!
基于注解的声明式事务:
1、在配置类上配置@EnableTransactionManagement开启事务:
2、在UserService类上方或者方法上方通过@Transactional完成事务配置:
编程式事务实现:
声明式事务处理: