本文共 675 字,大约阅读时间需要 2 分钟。
简要说一下流程,有的细节略过或者简化了。
Spring事务其实是使用了Spring自定义标签的解析功能和SpringAOP功能。
Spring定义了一个自定义标签,然后定义了这个标签对应的Parser。这个parser里面注册了一个AutoProxyCreator,也注册了一个Advisor(里面包含一个Interceptor)。
然后涉及Bean的加载过程,所有bean在创建时候都会包含一个流程,就是调用BeanPostProcessor的postProcessAfterInitialization方法。我们之前注册的这个AutoProxyCreator就是BeanPostProcessor的一个实现,它的postProcessAfterInitialization方法其实是就是获取增强然后对这个bean创建代理。那其中获取到的增强就包括我们之前注册的那个Advisor。这里面有个判断增强是否匹配的过程,怎么标记我们需要增强的bean呢,就是加事务注解,包含事务属性。有检测到事务属性,就说明这个bean需要这个增强。
增强完了之后,就是实际调用到这个bean的方法的时候,实际上调用的是那个代理,那个代理实际上要调用我们之前提到的那个Interceptor的invoke方法。这个方法里面,就是先创建事务,然后调用实际被增强的这个方法,然后异常处理包括回滚,然后提交事务。创建事务的流程是根据我们配置的事务属性的传播属性,然后对应不同的回滚流程,也对应不同的提交流程。
整个流程简单地说完了。下面是看书时候整理的具体的图可以参考一下。
转载地址:https://blog.csdn.net/u010898743/article/details/103897495 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!