天天看点

spring 事务_Spring使用注解声明事务

在上一篇中我们已经简单的介绍了用xml的方式声明事务,spring中除了上述方式外,还可以直接使用注解的方式管理事务,也就是通过@Transactional注解对需要的事务进行事务管理的。@Transactional注解可以对类或者方法进行标注。下面我们使用测试用例来演示@Transactional注解的具体使用。

spring 事务_Spring使用注解声明事务

因为@Transactional注解有默认的事务属性,所以只需要添加上述注解即可完成对事务的管理。但有一个问题我们要注意,就是虽然上述注解有默认事务功能,但是我们知道,事务的注解底层是通过AOP的方式实现事务管理的,所以我们还需要的配置spring中的xml,使之让spring支持对@Transactional注解的支持。具体配置如下:

spring 事务_Spring使用注解声明事务

上述配置是最简单的配置,实际上标签还有别外两个属性,下面我们看一下这两个属性的具体功能。

spring 事务_Spring使用注解声明事务

下面我们看一下@Transactional注解的相关默认属性都有哪些。

  • 事务传播行为--:PROPAGATION_REQUIRED
  • 事务隔离级别--:ISOLATION_DEFAULT
  • 读写事务属性--:读/写事务
  • 超时时间--:依赖底层的事务属性默认值
  • 回滚设置--:运行期异常回滚

上述介绍的是@Transactional注解的默认设置,虽然很常用,但不一定能满足我们所有的需求,所以,spring还提供我们手动设置上述默认注解的功能。具体的配置如下:

下面我们介绍一下@Transactional注解的注意事项

  • @Transactional注解可以被应用于接口定义接口方法、类定义、和类的public方法上。但spring建议我们将@Transactional注解最好标注在业务类的上。这是因为注解不能被继承,所以,如果我们将@Transactional注解标注在接口上时,那么它的子类由于无法继承,所以,此时的子类,spring是不会进行事务管理的。
  • 如果一个类已经使用了@Transactional注解,这时spring就会将这个类中所有的public方法上都添加事务管理,如果我们此时又在public方法上添加的方法级别的@Transactional注解,那么spring默认会用方法的注解覆盖类上面的@Transactional注解。

继续阅读