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

时间:2025-03-19 22:05:49
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
public class TransactionTest {

    /**
     * 方法A没事务
     *
     * @param
     * @return void
     */

    public String A(){
        ("A方法执行开始!!!");
        //生成TransactionTest代理类,再调用B方法,B的事务就回单独生效,并且异常回滚
        String result = ((TransactionTest)()).B();
        ("A方法执行结束!!!");
        return result;
    }

    /**
     * 事务B单独的事务
     * 使用代理,同一类中A方法调用B方法事务可以生效
     * @param
     * @return void
     */
    @Transactional(rollbackFor = )
    public String B(){
        return "事务B触发成功!!!";
    }
}

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