spring对我们的service组件创建了一个动态代理,你加了@Transactional注解之后,就对这个动态代理插入了事务管理的增强逻辑,开始执行方法之前先开启事务,方法中有报错就回滚事务,如果没有报错就提提交事务。如下图:
我们可以基于AOP先来模拟下@Transactional的效果,其实AOP的本质就是动态代理,而动态代理说白了就是一种代理模式,通过代理模式我们可以额外添加一些增强逻辑。因此我们可以利用代理类中的增强逻辑来实现@Transactional注解的效果,那么这个是什么意思呢?我们可以这样做,看下边这张图:
通过上边的图,我们可以看到,FlowRechargeCenterService.finishRefillData调用代理类方法时,代理类首先会开启一个事务,然后再执行目标类的方法,当目标类方法执行结束之后,再来看下此时是否发生异常,如果发生了异常,那么就直接回滚事务&
分布式事务实战八(Spring事务框架源码初探之基于AOP思想与动态代理无缝插入事务支持)
于 2022-04-10 14:41:59 首次发布
本文介绍了Spring如何基于AOP动态代理实现事务管理。通过模拟@Transactional注解的功能,展示了在方法执行前后如何添加事务增强逻辑,包括开启事务、异常时回滚事务和正常执行后提交事务的过程。并通过测试验证了事务管理的正确性。
摘要由CSDN通过智能技术生成