Spring框架 - 事务控制(四)>> 声明式事务控制

1.声明式事务控制

1. 编程式事务控制相关对象

1.1 PlatformTransactionManager

PlatformTransactionManager 接口是 spring 的事务管理器,它里面提供了我们常用的操作事务的方法。
在这里插入图片描述
注意:
PlatformTransactionManager 是接口类型,不同的 Dao 层技术则有不同的实现类
Dao 层技术是jdbc 或mybatis 时:

  • org.springframework.jdbc.datasource.DataSourceTransactionManager

Dao 层技术是hibernate时:

  • org.springframework.orm.hibernate5.HibernateTransactionManager

注意:该对象是用来提交事务回滚事务的对象,需要在配置文件中进行配置,并且需要注入数据源(DataSource对象),告诉该对象数据库的位置。

1.2 TransactionDefinition

TransactionDefinition 是事务的定义信息对象,里面有如下方法:
在这里插入图片描述

1. 事务隔离级别

设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读。

  • ISOLATION_DEFAULT
  • ISOLATION_READ_UNCOMMITTED
  • ISOLATION_READ_COMMITTED
  • ISOLATION_REPEATABLE_READ
  • ISOLATION_SERIALIZABLE

通俗解释:
红箭头指的是一个转出金额的方法,一个转入金额的方法
绿箭头指的是一个会报异常by/zero的方法
当转出金额的代码方法执行完以后,执行绿箭头的代码,报出异常,下面的代码就不会执行了,所以会导致钱已经转出了,但是对方没有收到的情况,所以转出转入方法要么都执行,要么都不执行,这就是要进行事务隔离的原因。
在这里插入图片描述

2. 事务传播行为

在这里插入图片描述

1.3 TransactionStatus

TransactionStatus 接口提供的是事务具体的运行状态,方法介绍如下。
在这里插入图片描述
注意:

  • 该对象是不需要进行任何声明配置的,因为这个对象是会根据程序运行,进行实时变化的,
    所以我们可以认为事务具体的运行状态等于PlatformTransactionManager实现类和TransactionDefinition对象的参数配置。

1.4 知识要点

编程式事务控制三大对象

  • PlatformTransactionManager
  • TransactionDefinition
  • TransactionStatus

2. 基于 XML 的声明式事务控制

2.1 什么是声明式事务控制

Spring 的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中声明,用在Spring 配置文件中声明式的处理事务来代替代码式的处理事务。

声明式事务处理的作用

  • 事务管理不侵入开发的组件。对方法进行事务增强,只需要在配置文件上进行配置,不需要进入到代码中修改,实现了一个高内聚,低耦合。如果想对代码中增强的事务进行参数的更改,也只需要在配置文件中进行修改即可。
  • 在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译, 这样维护起来极其方便

注意:Spring 声明式事务控制底层就是AOP。

2.2 声明式事务控制的实现

声明式事务控制明确事项:

  • 谁是切点?
  • 谁是通知?
  • 配置切面?

①引入tx命名空间

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

②配置事务增强

  • 事务平台管理器中要注入DataSource对象,让事务平台管理器知道数据库的位置。

在这里插入图片描述
③配置事务 AOP 织入
pointcut表示要增强的方法
在这里插入图片描述
④测试事务控制转账业务代码(业务层)
在这里插入图片描述

2.3 切点方法的事务参数的配置

其中,tx:method 代表切点方法的事务参数的配置,例如:
在这里插入图片描述
其中,tx:method 代表切点方法的事务参数的配置,例如:

<tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED"
timeout="-1" read-only="false"/>
  1. name:切点方法名称
  2. isolation:事务的隔离级别
  3. propogation:事务的传播行为
  4. timeout:超时时间
    (默认值是-1,没有超时限制。如果有,以秒为单位进行设置。)
  5. read-only:是否只读(建议查询时设置为只读)

2.4 知识要点

声明式事务控制的配置要点

  • 平台事务管理器配置
  • 事务通知的配置
  • 事务aop织入的配置

3. 基于注解的声明式事务控制

3.1 使用注解配置声明式事务控制

  1. 编写 AccoutDao
    在这里插入图片描述

  2. 编写 AccoutService
    使用@Transactional在方法或类上加注解,表示给当前方法或者给当前类下的所有方法增加事务功能。
    (当类上和方法上都有@Transactional注解时,就近原则,以方法上的注解为标准)
    在这里插入图片描述

  3. 编写 applicationContext.xml 配置文件
    在这里插入图片描述

3.2 注解配置声明式事务控制解析

  1. 使用 @Transactional 在需要进行事务控制的类或是方法上修饰,注解可用的属性同 xml 配置方式,例如隔离级别、传播行为等。
  2. 注解使用在类上,那么该类下的所有方法都使用同一套注解参数配置。
  3. 使用在方法上,不同的方法可以采用不同的事务参数配置。
  4. Xml配置文件中要开启事务的注解驱动<tx:annotation-driven />

3.3 知识要点

注解声明式事务控制的配置要点

  • 平台事务管理器配置(xml方式)
  • 事务通知的配置(@Transactional注解配置)
  • 事务注解驱动的配置 tx:annotation-driven/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值