spring事物初始化过程分析

news/2024/10/19 17:45:39/

1.注入4个bd

InfrastructureAdvisorAutoProxyCreator   父类:AbstractAutoProxyCreator
BeanFactoryTransactionAttributeSourceAdvisor   父类:Advisor
TransactionInterceptor                         父类:Advice
AnnotationTransactionAttributeSource

2.执行

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessBeforeInstantiation

逻辑分析:遍历所有的bd:

获取beanname->判断beanname是否有长度并且没有被处理过->是否遍历放入advisedBeans->

是否是基础类->是否该跳过

 4大基础类

3.执行org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessAfterInitialization

 判断是否需要增强逻辑:

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary

 

 根据切面创建代理逻辑:

 寻找所有的advisor

org.springframework.aop.support.AopUtils#findAdvisorsThatCanApply

 寻找所有advisor且可以申请使用的bean

org.springframework.aop.support.AopUtils#canApply(org.springframework.aop.Advisor, java.lang.Class<?>, boolean)

org.springframework.transaction.interceptor.TransactionAttributeSourcePointcut#matches

org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource#getTransactionAttribute

org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource#computeTransactionAttribute

1.首先去类对应的方法中寻找是否有@Transaction

2.方法找不到去类上找

 

3.类上找不到再去接口方法找

4.接口方法找不到再去接口找,

4步都找不到那么直接返回null,找到了就创建代理对象。 

 

 


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

相关文章

java开发的chatGPT机器人系统

ChatGPT机器人发展趋势&#xff1a; 更加个性化&#xff1a;随着数据和技术的不断进步&#xff0c;ChatGPT机器人将能够更加准确地理解用户的需求和偏好&#xff0c;并提供更加个性化的回复和服务。 多语言支持&#xff1a;随着ChatGPT在各个国家和地区的普及&#xff…

在 PDF 中添加文本的 3 种简单方法

我们更喜欢将我们的文件保存为 PDF 并打印它&#xff0c;这样打印的文件将保持原始的完美结构。你不得不承认&#xff0c;有时候&#xff0c;当你打印一个 Word 文件时&#xff0c;它可能会打印出乱七八糟的排版&#xff0c;这对进一步的工作来说是令人沮丧的。 PDF在我们的日…

【初学人工智能原理】【3】梯度下降和反向传播:能改(上)

前言 本文教程均来自b站【小白也能听懂的人工智能原理】&#xff0c;感兴趣的可自行到b站观看。 本文【原文】章节来自课程的对白&#xff0c;由于缺少图片可能无法理解&#xff0c;故放到了最后&#xff0c;建议直接看代码&#xff08;代码放到了前面&#xff09;。 代码实…

duilib 入门基础15 记录窗口大小

目录 一、窗口大小 1、窗口析构中,记住大小 2、重载 void OnInitLayout() 默认情况下,即使拉伸后,下次运行时,duilib窗口大小还是不变的,这里提供一种方法,用于记录窗口大小 一、窗口大小

不得不的创建型模式-建造者模式

目录 建造者模式是什么 下面是一个简单的示例代码&#xff0c;演示了如何使用建造者模式来构建一个复杂对象&#xff1a; 面试中可能遇到的问题及回答&#xff1a; 建造者模式是什么 建造者模式是一种创建型模式&#xff0c;它的目的是将复杂对象的构造过程分离成多个简单的…

Ngnix负载均衡和高可用集群及搭建与相关理论

Ngnix负载均衡和高可用集群及搭建与相关理论 全文目录 Ngnix负载均衡和高可用集群及搭建与相关理论高可能保持原理配置 keepalived&#xff1a;配置keepalived的IP将外部域名解析到Keepalived的虚拟IP上如何验证配置的正确性Nginx专用调试工具ngx_conf_t如何对前后端多台服务器…

分布式事务处理方案及分布式锁相关

​ 本文偏理论 一、事务处理 1、事务处理的四个特性ACID Atomicity 原子性: 对于数据库的修改&#xff0c;全部执行or全部不执行 Consistency 一致性: Isolation 隔离性 : 亦称为串行化&#xff0c;防止事务间操作混淆&#xff0c;需要串行化或者序列化请求&#xff0c;使…

Hive与HBase的区别及应用场景

目录&#xff1a; 零、前言一、定义二、区别三、应用场景 零、前言 在学大数据分析的过程中&#xff0c;Hive和HBase是两个非常重要的内容&#xff0c;对于初学者而言容易混淆。所以比较两者区别&#xff0c;能够帮助我们对这两个组件有一个清晰的认识和定位。那么&#xff0c;…