Spring事务失效可能是哪些原因

cccs7 Lv5

Spring中比较容易失效的就是通过@Transactional 定义的声明式事务,他在以下几个场景中会导致事务失效,首先,就是Spring的@Transactional是基于Spring的AOP机制实现的,而AOP机制又是基于==动态代理==实现的。那么如果代理失效了,事务也就会失效。

  1. @Transactional 应用在非 public 修饰的方法上面
    private方法,只会在当前对象中的其他方法中调用,也就是会进行对象的自调用,这种情况是用this调用的,并不会走到代理对象,而@Transactional是基于动态代理实现的,所以代理会失效。
  2. 同一个类中方法调用,导致 @Transactional 失效
    private
  3. final、static 方法
    由于 AOP 是通过创建代理对象来实现的,而无法对 final 方法进行子类化和覆盖,所以无法拦截这些方法
    还有就是调用 static 方法,因为这类方法是属于这个类的,并不是对象的,所以无法被AOP
  4. 没有代理
    没有代理对象,Bean 没有被 Spring 管理,那里面的方法就无效
  • Title: Spring事务失效可能是哪些原因
  • Author: cccs7
  • Created at : 2025-04-07 23:57:00
  • Updated at : 2025-04-08 00:03:32
  • Link: https://cs7eric.github.io/2025/04/07/Spring事务失效可能是哪些原因/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
Spring事务失效可能是哪些原因