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证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…

无线路由器中的MU-MIMO技术是如何提升网络效率的?

无线路由器中的MU-MIMO(多用户多输入多输出)技术通过一系列机制显著提升了网络效率。以下是MU-MIMO技术提升网络效率的具体方式: 一、提高网络容量 并行传输:MU-MIMO技术的核心在于能够同时向多个用户或设备传输数据&#xff0c…

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

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

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

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

WEB渗透Linux提权篇-MYSQL漏洞提权

往期文章 WEB渗透Linux提权篇-提权工具合集-CSDN博客 WEB渗透Linux提权篇-环境变量提权-CSDN博客 WEB渗透Linux提权篇-可写文件提权-CSDN博客 WEB渗透Linux提权篇-查找辅助信息-CSDN博客 WEB渗透Linux提权篇-漏洞提权-CSDN博客 WEB渗透Linux提权篇-通配符提权-CSDN博客 …

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

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

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

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

Java实用类——操作日期和时间

Date类: Date 位于java.util.Date类:表示日期和时间SimpleDateFormat 位于java.text.SimpleDateFormat类:格式化日期类parse方法:将字符串转为日期类型 public static void main(String[] args) throws ParseException {//获得当…

日本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…

kafka单条消息过大发送失败

在使用Apache Kafka时,如果单条消息过大,可能会导致发送失败。Kafka对消息的大小有一定的限制,这些限制通常分为两个层面: Broker(服务器)层面:Kafka的broker配置中,message.max.byt…

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

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

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之间的随机数 字段计算器设置点击确定…

中国科学院近代物理研究所博士招生目录

中国科学院大学(英文名:University of Chinese Academy of Sciences),简称"国科大",是一所以科教融合为办学模式、研究生教育为办学主体、精英化本科教育为办学特色的创新型大学。 中国科学院近代物理研究所…

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

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

Result 和 自定义异常 在前后端交互中的作用

Result 和自定义异常在前后端交互中扮演着重要的角色。它们可以帮助我们规范化接口返回值,提高错误处理的可读性和可维护性。 Result的作用 Result通常是一个封装了请求结果的类,它包含了请求的状态码、消息和数据。在前端和后端的交互中,Result的作用…

[Go]-抢购类业务方案

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

谈一谈MVCC

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