Spring事务源码详解 |
您所在的位置:网站首页 › 后端入门难吗 › Spring事务源码详解 |
上篇文章介绍了事务开启,前面介绍了解析adviors。 spring事务源码详解-spring原码(一)![]()
先从缓存里获取,主要是判断循环依赖是否创建动态代理 进去wrapIfNecessary 先if判断advised是不是需要增强bean 如果是advised增强bean不需要动态代理 再重复判断一下是否不是切入点一些类,是的话加入advised 这里通过getAdvicesAndAdvisorsForBean拿到我们之前配置的advices
通过AopUtils里的find找到我们可以用的advisors 这里主要拿到advisors的pointCut,和配置类里的事务属性源
这里也有缓存,提高性能 当我们的缓存为空,则去解析我们的注解 解析成事务属性transactionAttribute,解析到代表匹配成功 在computeTransaction方法里面,拿到我们最终方法(加入你当前类是个接口,会拿到你实现类的方法) 先根据方法解析,再根据实现类解析 当我们执行具体方法的时候,回来到我们动态代理类。 拿到我们之前解析的事务属性 在try之前开启事务 在catch里面回滚 在最后commit 如果有传播性的话,会根据事务传播行为来确定是否开启。 开启事务用createTransactionIfNecessary方法开启,判断是否有必要开启。 在这个里面会判断传播行为,一个一个判断。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |