40、spring事务什么时候会失效

spring事务什么时候会失效

spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不起作用了! 常见情况有如下几种:

  • 发生自调用,类里面使用this调用本类的方法(this通常省略),此时这个this对象不是代理类,而是UserService对象本身!

      	解决方法很简单,让那个this变成UserService的代理类即可!
    
  • 方法不是public的

      @Transactional 只能用于 public 的方法上,否则事务不会失效
      如果要用在非 public 方法上,可以开启AspectJ代理模式。
    
  • 数据库不支持事务

  • 没有被spring管理

  • 异常被吃掉,事务不会回滚(或者抛出的异常没有被定义,默认为RuntimeException)

你可能感兴趣的:(spring,java,后端,事务,AOP,AspectJ,this)