Spring-@Bean的处理流程

@Bean前置知识

1 需要再Configuration Class中才能被解析
2 静态@Bean也就是标注在static方法上的 实例@Bean标注在普通方法上的
所有的Bean在创建之前都会变成BeanDefinition,其中有这样两个属性:
在这里插入图片描述
setFactoryMethodName:静态方法
setFactoryBeanName:指定工厂Bean名称

处理流程

首先在创建上下文的时候,这里面做了两件事情:
1 创建了reader
2 创建了scanner
其中reader会去注册ConfigurationClassPostProcessor:
在这里插入图片描述
而scanner会去扫包下的配置类@Configuration,在扫描的时候是通过includeFilters去实现的:
在这里插入图片描述
因为我们的@Configuration其实继承了@Component
在这里插入图片描述

那么完成了@Configuration扫描以后@Bean怎么处理转换为BeanDefinition呢?
它的处理依赖于ConfigurationClassPostProcessor
在这里插入图片描述
然后再processConfigBeanDefinitions里面通过ConfigurationClassParser进行操作:
在这里插入图片描述
跟踪源码到下面这个方法,里面会有递归的扫描,也就是处理Configuration里面嵌套:
在这里插入图片描述
然后标注了@Bean的就会被取出来封装成为MethodMetadata:
在这里插入图片描述

然后MethondMetadata方法转换为BeanDefinition:在这里插入图片描述

进入loadBeanDefinitionsForBeanMethod这个方法,里面有个非常重要的判断逻辑,如果是静态的直接设置BeanClass和方法名:
在这里插入图片描述
如果是实例方法则设置FactoryBeanName。
这两个的区别是static直接调用方法所以它的加载不依赖于Configration的Bean实例,普通实例方法依赖于Configration这个配置类,也就是Configration这个类先要变为Bean然后进行普通方法@Bean的处理。
这里还需要注意ConfigurationClassPostProcessor的优先级是优先里面最低的(也就是要优先处理,但是处理的优先尽量靠后)。
在这里插入图片描述
然后PostProcessor怎么生效的其实就是在容器刷新的时候去主动调用的:
在这里插入图片描述
上面的调用对应了:
postProcessBeanDefinitionRegistry
下面的调用对应了:
postProcessBeanFactory

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive SQL基础语法及查询实践

目录 基础语法 1. 官网地址 2. 查询语句语法 基本查询(Select…From) 数据准备 (0)原始数据 (1)创建部门表 (2)创建员工表 (3)导入数据 全表和特定列查…

2024年四川省安全员B证证考试题库及四川省安全员B证试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年四川省安全员B证证考试题库及四川省安全员B证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…

使用 EMQX 开源版的 Webhook 机制处理消息并存储数据

1、前言 EMQX 是一款强大的开源 MQTT 消息代理,它支持大量的连接和高吞吐量,适用于各种物联网应用。Webhook 是 EMQX 提供的扩展功能之一,用于将消息推送到外部的 HTTP 服务。在本文中,我们将介绍如何使用 EMQX 开源版的 Webhook …

蜜罐网络MHN安装过程中的坑

蜜罐网络MHN安装过程中的坑 1. 相当的资源在github上,下不下来 科学上网,直接sudo proxychains4 ./install.sh是不行的,修改不了sh脚本里面的访问 配置好proxychains4以后,直接修改系统别名: alias wgetproxychai…

Java+Swing+sqlserver学生成绩管理系统

JavaSwingsqlserver学生成绩管理系统 一、系统介绍二、系统展示1.登陆2.课程分配3.选课管理4.学生打分--教师4.查询个人成绩--学生 三、其他1.其它系统 一、系统介绍 管理员:登陆页面、课程管理、选课管理 老师:给学生打分 学生:查询个人成绩 二、系…

node.js、php、Java、python校园点餐与数据分析系统 校园食堂订餐系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

日本IT编程语言对比分析-Python /Ruby /C++ /Java

在日本IT行业中,Python、Ruby、C和Java是几种广泛使用的编程语言,它们各自具有独特的优势和适用场景。以下是对这四种编程语言的对比分析: 1. Python 优势: 简洁易读:Python的语法简洁清晰,易于学习和使用…

五,Spring Boot中的 Spring initializr 的使用

五,Spring Boot中的 Spring initializr 的使用 文章目录 五,Spring Boot中的 Spring initializr 的使用1. 方式1:IDEA创建2. 方式2:start.spring.io 创建3. 注意事项和细节4. 最后: 需要:使用 Spring initi…

电器维修系统小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,客服聊天管理,基础数据管理,公告管理,新闻信息管理 微信端账号功能包括:系统首页,新闻信息,我的 开发系…

OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 绘制一个简单的、粗的或填充的直立矩形。 这个函数 cv::rectangle 绘制一个矩形轮廓或一个填充的矩形,其两个相对的顶点分别是 pt1 和…

Arcgis字段计算器:随机生成规定范围内的数字

选择字段计算器在显示的字段计算器对话框内,解析程序选择Python,勾选上显示代码块, 半部分输入: import random; 可修改下半部分输入: random.randrange(3, 28) 表示生成3-28之间的随机数 字段计算器设置点击确定…

Java+Swing可视化图像处理软件

JavaSwing可视化图像处理软件 一、系统介绍二、功能展示1.图片裁剪2.图片缩放3.图片旋转4.图像灰度处理5.图像变形6.图像扭曲7.图像移动 三、系统实现1.ImageProcessing.java 四、其它1.其他系统实现 一、系统介绍 该系统实现了图片裁剪、缩放、旋转、图像灰度处理、变形、扭曲…

[Go]-抢购类业务方案

文章目录 要点:1. 抢购/秒杀业务的关键挑战2. 技术方案3.关键实现点4.性能优化建议5.其他考虑因素 细节拆分:1. **高并发处理**2.**限流与防护**3.**库存控制**4. **异步处理**5. **数据一致性**6. **常用架构设计**7. **代码示例**8. 进一步优化9. 注意…

谈一谈MVCC

一 MVCC的定义 MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库管理系统(DBMS)中的并发控制方法,它允许数据库读写操作不加锁地并发执行,从而提高了数据库系统的并发性…

苹果手机突然黑屏打不开怎么办?

苹果手机作为市场上备受欢迎的智能手机之一,其稳定性和流畅性一直备受赞誉。然而,偶尔遇到手机突然黑屏无法打开的情况,也会让不少用户感到困扰。今天,我们就来详细探讨一下苹果手机突然黑屏打不开的解决方法,帮助大家…

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…

【RabbitMQ之一:windows环境下安装RabbitMQ】

目录 一、下载并安装Erlang1、下载Erlang2、安装Erlang3、配置环境变量4、验证erlang是否安装成功 二、下载并安装RabbitMQ1、下载RabbitMQ2、安装RabbitMQ3、配置环境变量4、验证RabbitMQ是否安装成功5、启动RabbitMQ服务(安装后服务默认自启动) 三、安…

vue3+ts封装类似于微信消息的组件

组件代码如下&#xff1a; <template><div:class"[voice-message, { sent: isSent, received: !isSent }]":style"{ backgroundColor: backgroundColor }"click"togglePlayback"><!-- isSent为false在左侧&#xff0c;为true在右…

传输层协议UDP

本篇将主要介绍 UDP 协议&#xff0c;介绍了有关 UDP 协议的报头、协议特点、UDP 协议在操作系统中的缓冲区、UDP 协议使用的注意事项&#xff0c;以及有关 UDP 的 Socket 编程程序&#xff0c;同时重点介绍了操作系统对于 UDP 协议报文的管理。 接着介绍了有关端口号的映射。 …

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议&#xff0c;也叫TCP/IP协议族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信&#xff0c;引…