Spring事务(2)使用Spring事务完成转账小例子

时间:2024-03-18 16:18:42

Spring支持两种方式事务管理:

1.编程式的事务管理

    在实际应用中很少使用;通过TransactionTemplate手动管理事务。

2.使用XML配置声明式事务

   开发中推荐使用;Spring的声明式事务是通过AOP实现的。

 

转账小例子环境搭建

第一步:新建数据库

Spring事务(2)使用Spring事务完成转账小例子

第二步:引入数据库、Spring、c3p0连接池的jar包;在src目录下引入spring的配置文件

第三步:在Spring的配置文件中,配置c3p0连接池

Spring事务(2)使用Spring事务完成转账小例子

第四步:编写dao,service

接口

Spring事务(2)使用Spring事务完成转账小例子

Spring事务(2)使用Spring事务完成转账小例子

dao实现:

Spring提供了一个JDBC的模板类,完成数据库的操作

在dao中注入连接池,连接池会帮助我们创建JDBC的模板类

Spring事务(2)使用Spring事务完成转账小例子

Spring事务(2)使用Spring事务完成转账小例子

service的实现:

在service中注入dao

Spring事务(2)使用Spring事务完成转账小例子

Spring事务(2)使用Spring事务完成转账小例子

Spring事务(2)使用Spring事务完成转账小例子

测试:

Spring事务(2)使用Spring事务完成转账小例子

这时候我们的程序没有进行事务的管理,那么在我们转账的过程中,要是程序出现了异常,就会导致错误:

Spring事务(2)使用Spring事务完成转账小例子

Spring事务(2)使用Spring事务完成转账小例子

aaa账户扣钱,但是bbb账户没有加钱

1 编程式事务管理

Spring为我们提供了一个事务模板类,来管理事务

第一步:在Spring的配置文件中配置事务管理器和事务模板类

将事务管理器注入到事务模板类中

Spring事务(2)使用Spring事务完成转账小例子

第二步:在service中注入事务模板类

Spring事务(2)使用Spring事务完成转账小例子

Spring事务(2)使用Spring事务完成转账小例子

第三步:在service中使用事务模板类创建事务

Spring事务(2)使用Spring事务完成转账小例子

2 声明式事务管理

该方法是基于AOP实现的,要引入AOPjar包

2.1 基于TransactionProxyFactoryBean的方式

第一步:配置事务管理器

Spring事务(2)使用Spring事务完成转账小例子

第二步:为service类配置事务代理类

Spring事务(2)使用Spring事务完成转账小例子

让这个代理类来接管Service,相当于这个代理类是在原来的service的基础上加入了事务管理的一个类。

Props中定义的是事务的属性。

Key代表的是设置哪个方法的事务属性:

Key的值可以是,1.*代表全部方法;2.save*,update*;3.方法全名

第三步:在测试的时候,注入的应该是增强后的service--也就是代理类

Spring事务(2)使用Spring事务完成转账小例子

附:设置其他事务属性

设置事务只读,那么在这个事务中如果出现修改、插入、删除的操作,就会报异常

Spring事务(2)使用Spring事务完成转账小例子

设置事务出现哪些异常不回滚,即出现该异常,事务照常提交

Spring事务(2)使用Spring事务完成转账小例子

在实际开发中不经常使用这种方式,原因在于这种方式需要为每一个事务管理类配置一个代理类

2.2 基于AspectJ的XML方式 

aspectJ的目的是为了简化AOP开发,需要引入aspectJ和spring整合aspectJ的jar包

第一步:配置事务管理器

Spring事务(2)使用Spring事务完成转账小例子

第二步:配置事务的增强

Spring事务(2)使用Spring事务完成转账小例子

还可以通过配置如下的一些参数来设置事务的属性

Spring事务(2)使用Spring事务完成转账小例子

第三步:配置切面

在切点上加入事务

Spring事务(2)使用Spring事务完成转账小例子

2.3 基于注解的方式

第一步:配置事务管理器

Spring事务(2)使用Spring事务完成转账小例子

第二步:开启注解事务

Spring事务(2)使用Spring事务完成转账小例子

第三步:在service上加上事务注解

Spring事务(2)使用Spring事务完成转账小例子

注解上有一些属性,可以对事务的属性进行配置

Spring事务(2)使用Spring事务完成转账小例子

Spring事务(2)使用Spring事务完成转账小例子

总结

Spring事务(2)使用Spring事务完成转账小例子