spring对我们的service组件创建了一个动态代理,你加了@Transactional注解之后,就对这个动态代理插入了事务管理的增强逻辑,开始执行方法之前先开启事务,方法中有报错就回滚事务,如果没有报错就提提交事务。如下图:
我们可以基于AOP先来模拟下@Transactional的效果,其实AOP的本质就是动态代理,而动态代理说白了就是一种代理模式,通过代理模式我们可以额外添加一些增强逻辑。因此我们可以利用代理类中的增强逻辑来实现@Transactional注解的效果,那么这个是什么意思呢?我们可以这样做,看下边这张图:
通过上边的图,我们可以看到,FlowRechargeCenterService.finishRefillData调用代理类方法时,代理类首先会开启一个
分布式事务实战八(Spring事务框架源码初探之基于AOP思想与动态代理无缝插入事务支持)
于 2022-04-10 14:41:59 首次发布