美文网首页
@Transactional 注解失效场景

@Transactional 注解失效场景

作者: code_搬运工 | 来源:发表于2024-09-29 14:36 被阅读0次

1、@Transactional 应用在非public方法上
Java的访问权限主要有四种 :private、default、protected、public,它们的权限从左到右,依次变大。

2、方法用final修饰
如果一个方法不想被子类重写,我们可以将该方法定义为final。我们知道@Transactional是通过AOP来实现的,如果方法被定义为了final,那么它就不能被代理类重写,也就无法使用事务

3、未被Spring管理
@Transactional是由Spring容器所管理,如果一个使用@Transactional的Bean不是通过Spring容器创建的(直接new的),则@Transctional是无效的

4、方法内部调用
当@Transactional注解的方法在同一个类的内部被调用时,会导致后面调用方法的@Transactional失效。
这是因为Spring的事务管理是基于AOP(面向切面编程)实现的,而AOP代理默认是通过JDK动态代理或CGLIB代理来实现的。

原理分析

  • JDK动态代理:
    仅适用于接口上的方法。
    如果你的Bean实现了某个接口,Spring会使用JDK动态代理来创建代理对象。
  • CGLIB代理:
    适用于没有实现接口的类。
    Spring会生成一个子类来代理这个Bean。
    解决方案
    将事务性方法提取到另一个Bean中

5、多线程调用
两个方法不在一个线程中
6 数据库不支持

相关文章

网友评论

      本文标题:@Transactional 注解失效场景

      本文链接:https://www.haomeiwen.com/subject/tecdrjtx.html