坐标xml
删除AccountServiceTest测试类上的@Qualifier的注解,不产生代理对象
此时事务没有控制住
applicationContext.xml
可以使用【前置通知】、【后置通知】、【异常通知】、【最终通知】
坐标
配置AccountServiceImpl.java的注解
配置AccountDaoImpl.java的注解
配置ConnectionUtils.java的注解
配置TransactionManager.java的注解
配置spring容器
配置applicationContext.xml
text
但是发现,抛出异常。
因为注解的方式执行顺序是【前置通知】、【最终通知】、【异常通知】/【后置通知】
我们需要使用环绕通知解决问题。
配置TransactionManager.java
它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。
操作关系型数据的:
JdbcTemplate (操作JDBC,操作数据库)
HibernateTemplate (操作hibernate,操作数据库)
操作nosql数据库的: RedisTemplate(操作Redis,非关系型数据库)
操作消息队列(MQ)的: JmsTemplate (操作ActiveMQ,消息队列)
* 短信平台
* 邮件平台
操作索引库的:ElasticSearchTemplate(操作ElasticSearch,全文检索)
我们今天的主角在spring-jdbc-5.0.2.RELEASE.jar中,我们在导包的时候,除了要导入这个jar包外,还需要导入一个spring-tx-5.0.2.RELEASE.jar(它是和事务相关的)。
坐标xml
创建类Account.java
创建类JdbcTemplateDemo1.java
使用spring提供的数据源
配置applicationContext.xml
创建JdbcTemplateDemo2.java
创建测试类JdbcTemplateDemo3.java
创建AccountDao接口
创建接口的实现类AccountDaoImpl.java
applicationContext.xml
test
使用AccountDaoImpl继承JdbcDaoSupport,实现AccountDao
applicationContext.xml
test
创建AccountDao接口
创建AccountDaoImpl2实现AccountDao
applicationContext-anno.xml
重新创建applicationContext-anno.xml演示,表示使用注解
test
第一:JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案。
第二:spring框架为我们提供了一组事务控制的接口 。具体在后面的第二小节介绍。这组接口是在spring-tx-5.0.2.RELEASE.jar中。
第三:spring的事务控制都是基于AOP的,它既可以使用编程的方式实现,也可以使用配置的方式(声明式)实现。我们学习的重点是使用配置(声明式事务处理)的方式实现。
此接口是spring的事务管理器,它里面提供了我们常用的操作事务的方法,如下图:
我们在开发中都是使用它的实现类:
真正管理事务的对象
org.springframework.jdbc.datasource.DataSourceTransactionManager 使用Spring JDBC或myBatis 进行持久化数据时使用
org.springframework.orm.hibernate5.HibernateTransactionManager 使用Hibernate版本进行持久化数据时使用
JpaTransactionManager,使用Jpa操作持久化数据时使用
它是事务的定义信息对象,里面有如下方法:
1:事务的隔离级别
2
2:事务的传播行为
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起,从新开启一个新的事务。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
NEVER:以非事务方式运行,如果当前存在事务,抛出异常
NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行REQUIRED类似的操作。
3:事务超时时间
默认值是-1,没有超时限制。如果有,以秒为单位、会进行设置,在事务提交/回滚后多长时间,事务失效。
4:是否是只读事务
建议查询时设置为只读。
增删改设置可写。
此接口提供的是事务具体的运行状态,方法介绍如下图:
坐标xml
AccountDao.java
AccountDaoImpl.java
AccountService.java
AccountServiceImpl.java
applicationContext.xml
test
Jdbc的操作,需要配置Jdbc的事务管理器
配置applicationContext.xml
配置事务管理模板
配置applicationContext.xml
在业务层注入事务管理模板
配置applicationContext-tx1.xml
AccountServiceImpl.java
配置applicationContext.xml
同时去掉:TransactionTemplate的操作
配置AccountDaoImpl.java
配置AccountServiceImpl.java
注意:方法级别的事务会覆盖类级别的事务
配置applicationContext.xml
Spring整体的总结:
总结:
1:IOC DI(xml和注解)
2:AOP(5种通知)(xml和注解)
3:声明式事务处理(xml和注解)
4:spring3的新特性(纯注解开发)
自己创建的对象:使用注解
第三方创建的对象(数据源…):使用配置文件
手机扫一扫
移动阅读更方便
你可能感兴趣的文章