AopContext.currentProxy的原理和实战(解决同一个类中方法嵌套事务的失效问题)

@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
public class TransactionTest {
 
    /**
     * 方法A没事务
     *
     * @param
     * @return void
     */
    public String A(){
        System.out.println("A方法执行开始!!!");
        //生成TransactionTest代理类,再调用B方法,B的事务就回单独生效,并且异常回滚
        String result = ((TransactionTest)AopContext.currentProxy()).B();
        System.out.println("A方法执行结束!!!");
        return result;
    }
 
    /**
     * 事务B单独的事务
     * 使用代理,同一类中A方法调用B方法事务可以生效
     * @param
     * @return void
     */
    @Transactional(rollbackFor = Exception.class)
    public String B(){
        return "事务B触发成功!!!";
    }
}

其实AopContext.currentProxy()的本质是使用的ThreadLocal生成本地代理,这样的做法可能影响性能,后续文章对ThreadLocal的内部原理和性能进行进一步深入!

如果本篇文章对你有帮助的话,很高兴能够帮助上你。

当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。

猜你喜欢

转载自blog.csdn.net/chenthe1/article/details/129800755