【有书共读】《Spring源码深度解读》第十章事务

面试中,事务常作为面试问题点,在面试中,我就被问到过很多次关于spring事务的问题,常见问题有
1、spring事务隔离级别
2、spring事务传播机制
3、编程式事务、声明式事务
以下是本章内容:
一:事务自定义标签

在配置文件中<tx:annotation-driven/>。此配置是事务的开关,如果没有此配置,那么spring中将不存在事务的功能。

关键字annotation-driven,最终锁定TxNamespaceHandler类,此类中有init()方法。在其中又调用AnnotationDrivenBeanDefinitionParser类的parse方法进行解析。

二:事务增强器

TransactionInterceptor支撑着整个事务功能的架构,逻辑还是相对复杂的。TransactionInterceptor类继承自MethodInterceptor,所以调用该类从invoke方法开始。

在此方法中 主要有8个步骤

(1)获取事务属性。对于事务处理来说,最基础最首要的工作便是获取事务属性,这是支撑整个事务功能的基石,如果没有事务属性,其他功能也无从谈起。(见getTranscation方法)

(2)加载配置中配置的TransactionManager

(3)不同的事务处理方式采用不同的逻辑。(声明式事务创建见creatTranscationIfNecessary方法)

(4)在目标方法方法执行时获取事务并收集事务信息。(见dogetTranscation方法)

(5)执行目标方法。

(6)一旦出现异常,尝试异常处理。不是所有异常,spring都会讲其回滚,默认只对RuntimeException回滚。(见completeTranscationAfterThrowing方法)

(7)提交事务前的事务信息清除。(见cleanupAfterCompletion)

(8)提交事务。(见commit方法,正常提交流程见commit方法内调用的processCommit方法)
为了简短篇幅,方便阅读,具体方法只标出方法名,可在移步GitHub查看对应方法的详细代码


#读书笔记#
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务