@Transactional注解使用

spring事务管理 有编程式和声明式,其中声明式的一种方式可以采用全注解 @Transactional进行。

这种方式符合无嵌入式的侵入,比较方法灵活。

0、demo里面 采用了全注解方式 主要为了测试3的情况

        


  • mode:指定Spring事务管理框架创建通知bean的方式。可用的值有proxy和aspectj。前者是默认值,表示通知对象是个JDK代理;后者表示Spring AOP会使用AspectJ创建代理
  • proxy-target-class:如果为true,Spring将创建子类来代理业务类;如果为false,则使用基于接口的代理。(如果使用子类代理,需要在类路径中添加CGLib.jar类库)
  • order:如果业务类除事务切面外,还需要织入其他的切面,通过该属性可以控制事务切面在目标连接点的织入顺序。
  • transaction-manager:指定到现有的PlatformTransaction Manager bean的引用,通知会使用该引用

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">




destroy-method="close">

































class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

1、该注解可以作用在类、方法,接口及接口方法上面

        当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义

2、@Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

3、默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。

4、@Transactional的属性

  • isolation 枚举org.springframework.transaction.annotation.Isolation的值 事务隔离级别
  • noRollbackFor Class[] 一组异常类,遇到时不回滚。默认为{}
  • noRollbackForClassName Stirng[] 一组异常类名,遇到时不回滚,默认为{}

  • propagation 枚举org.springframework.transaction.annotation.Propagation的值 事务传播行为

  • readOnly boolean 事务读写性

  • rollbackFor Class[] 一组异常类,遇到时回滚

  • rollbackForClassName Stirng[] 一组异常类名,遇到时回滚

  • timeout int 超时时间,以秒为单位

  • value String 可选的限定描述符,指定使用的事务管理器

附录项目测试demo:

你可能感兴趣的:(java)