Spring事务失效的原因(转载)

特殊说明:转载博主内容,此处仅作学习整理记录

1、没有被 Spring 管理 。

复制代码
//@Service
public class OrderServiceImpl implements OrderService {

    @Transactional
    public void updateOrder(Order order) {
        //update order
    }

}
复制代码

 @Service 注掉,这个类就不会被加载成 Bean,这个类就不会被 Spring 管理了,事务自然就失效了。

2、方法不是 public 的(?)

 @Transactional 只能用于 public 的方法上,否则事务不会失效,如果要用在非 public 方法上,可以开启 AspectJ 代理模式。 spring的声明式事务是基于代理模式的。由于java继承时, 不能重写 private , final , static 修饰的方法。private 方法, final 方法 和 static 方法都没有事务支持。原因,pring的声明式事务是基于代理模式的。 所以, 所有的 private 方法, final 方法 和 static 方法 都无法 直接 添加spring的事务管理功能。

private 方法无法添加事务管理. final 方法无法添加事务管理. static 方法无法添加事务管理. 当绕过代理对象, 直接调用添加事务管理的方法时, 事务管理将无法生效.?

3、异常被吃自定义捕获或异常类型不对

复制代码
@Service
public class OrderServiceImpl implements OrderService {

    @Transactional
    public void updateOrder(Order order) {
        try {
           
        } catch {

        }
    }
}
复制代码

4、自身(this)调用问题(疑惑点)

复制代码
@Service
public class TestService {

    /**
     * 这里调用methodB() 的事务将会失效
     */
    public void methodA(){
        this.methodB();
    }
    
    @Transactional
    public void methodB(){

    }
}
复制代码

 

posted @   jiajinhao  阅读(142)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示