暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

事务无法生效问题分析

小D学Java 2020-02-14
322

背景

失效代码例子

public class Service {
    public void A(){
        //业务代码
        B();
        //其它业务代码
    }

    @Transactional
    //数据库操作
    public void B() {
       //方法B的事务没生效
    }
}

原因

Spring在启动时会扫描所有需代理的bean,而那些需代理的bean已全部通过创建代理来返回bean.

Spring的事务的切面是作用在代理类上的,直接service类的内部调用无法切中代理类的pointcut

解决方案

使用代理类来调用方法,来命中aop的pointcut

  • AopContext.currentProxy()
    ,首选这种模式

  • 使用BeanFactory
    获取bean直接调用

  • service类注入自己


文章转载自小D学Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论