springboot解析@transaction注解原理

news/2024/11/8 7:34:39/

目录

第一步、全局搜索Transactional.class

第二步、查看哪里配置BeanFactoryTransactionAttributeSourceAdvisor

第四、SpringTransactionAnnotationParser是什么时候被注入的

第三、总结


先看一下@transaction的官网文档

16. Transaction Management

第一步、全局搜索Transactional.class

如下图所示,找到 SpringTransactionAnnotationParser类

 之后在  SpringTransactionAnnotationParser#isCandidateClass方法处断点查看调用栈

 我这里使用事物的类是 StudentService

 真正进行aop代理的地方是 Advisor,那么我在AbstractAdvisorAutoProxyCreator#findEligibleAdvisors方法里面进行条件断点

 发现这个advisor信息

 org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor: advice org.springframework.transaction.interceptor.TransactionInterceptor@3fce8fd9

 从中可以看出

advisor:BeanFactoryTransactionAttributeSourceAdvisor

advice:TransactionInterceptor

相信熟悉aop的同学一眼就能看出,transaction的commit或者rollback增强逻辑就在TransactionInterceptor里。

第二步、查看哪里配置BeanFactoryTransactionAttributeSourceAdvisor

还是老套路,扎到BeanFactoryTransactionAttributeSourceAdvisor类,ctrl+f找到哪些地方调用该类,猜测是在ProxyTransactionManagementConfiguration类里。

 点击进去果然验证猜想

 这样就解释了@transaction是如何被springboot解析的。

第四、SpringTransactionAnnotationParser是什么时候被注入的

直接给出结论:在 AnnotationTransactionAttributeSource初始化的时候初始化SpringTransactionAnnotationParser

第三、总结

1、springboot通过自动配置类ProxyTransactionManagementConfiguration, 设置@transaction的advisor(BeanFactoryTransactionAttributeSourceAdvisor)

2、BeanFactoryTransactionAttributeSourceAdvisor设置@transaction增强逻辑transactionInterceptor

3、在 AnnotationTransactionAttributeSource初始化的时候初始化SpringTransactionAnnotationParser。SpringTransactionAnnotationParser能判断一个类上是否有@transaction注解


http://www.ppmy.cn/news/456113.html

相关文章

网络层:网际控制报文协议ICMP

网络层:网际控制报文协议ICMP 笔记来源: 湖科大教书匠:网际控制报文协议ICMP 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 主机或路由器使用ICMP来发送差错报告报文和询问报文 ICMP报文被封装在IP数据报中发送…

【简单的图像信息展示应用程序】PYQt5

写在前面的话 这段代码的作用是创建一个简单的图像信息展示应用程序,用户可以点击按钮查看特定文件夹中图像的文件名、大小,并通过查看按钮查看图像。请注意,文件夹路径需要根据实际情况进行修改。 代码讲解 这段代码是使用PyQt5库创建一个…

软件测试第一次做项目之银行项目【操作细节总结】

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试?在这些测试的内容中如何去更好的掌握测试技能保证测试质量,一起来学习探讨交流。 下面为银行测试点的概括: 根据上图,我们可以从以下几个方面重点关注: …

大前端高频面试题详解 确定不看看?(持续更新)

HTML5 1.如何理解HTML5结构语义化? 段落用 p 标签,标题用 h 系列标签,边栏用 aside 标签,主要内容用 main 标签 对开发者: 便于团队的开发和维护在没有加载 CSS 的情况下也能呈现较好的内容结构与代码结构,易于阅读 对浏览器&…

高薪面试题之四.前端

更多面试题请狠狠的点击 下载 视频课:https://edu.csdn.net/course/play/7621 你在昨天/本周学到了什么? 这段事件一直在整理有关前端的面试题目,整理这也题目,不只是为了能够学习应付即将到来的面试,更是为了补补基础…

Web前端知识体系精简

Web前端技术由html、css和javascript三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体…

最新Web前端面试题精选大全及答案

目录 HTML、CSS相关 Javascript相关 三者的异同 Vue相关 55.Vue路由懒加载(按需加载路由) React相关 react 生命周期函数 ******为什么虚拟 dom 会提高性能?(必考) (组件的)状态(state)和属性(props)之间有何不同 shouldComponentUpdate 是做…

2022年最新前端面试题(大前端时代来临卷起来吧小伙子们..持续维护走到哪记到哪)

目录 css经典高频面试题 前端核心手写面试题看你的核心扎实不扎实 js部分面试题 js的数据类型(关于数据类型相关的) 基本数据类型 ES5的5种:Null,undefined,Boolean,Number,String&#xff0c…