SpringBoot 自动装配原理剖析

SpringBoot 自动装配原理剖析

当我们启动Spring项目后,一些来自第三方的bean对象就自动存入到IOC容器中,这个过程不需要我们手动声明,却可以直接使用,这就是SpringBoot中的自动装配。

那么SpringBoot是如何实现自动装配的呢?为了搞清楚自动装配的原理,我们得从SpringBoot启动类上的@SpringBootApplication开始入手:

我们知道@EnableXxxx开头的注解下面通常封装了@Import注解,通过@Import注解又会导入相应类。

@Import注解中导入的是ImportSelector接口的实现类,AutoConfigurationImportSelector类中重写的selectImports()方法的返回值会被导入到IOC容器中进行管理,那么这个返回值中到底存储了什么呢?让我们接着往下看:

selectImports()方法中返回值的内容源于方法底层调用的getAutoConfigurationEntry()方法,通过getAutoConfigurationEntry()方法我们获取到需要自动装配的配置类集合

而这个用于获取自动装配配置类信息集合的方法的关键结果来源于getAutoConfigurationEntry()方法调用的getCandidateConfigurations(annotationMetadata, attributes) 方法 ,通过getCandidateConfigurations(annotationMetadata, attributes) 这个方法获取到配置文件中配置的自动配置类的集合信息。

观察该方法断言中信息我们可以得知, META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中保存着需要自动装配的配置类集合信息 ,而getCandidateConfigurations(annotationMetadata, attributes) 方法的作用就是从该文件中读取这些需要自动装配的配置类集合信息。

在**META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports**配置文件中保存的全限定类名对应的需要进行自动装配的配置类实质上是一个配置类,配置类中声明了需要的bean对象:

SpringBoot自动装配的原理图如下:

相关推荐
阿祖zu14 小时前
别再优化 RAG 了,适配 Agent 的 LLM Wiki 知识库理念
前端·后端·aigc
昵称为空C15 小时前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端
用户83562907805115 小时前
用 Python 自动化 PowerPoint 演讲者备注添加
后端·python
神奇小汤圆15 小时前
科研神器再升级!Claude Code 全套 Skills,16 大科研场景全覆盖!
后端
东坡白菜15 小时前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
tyung16 小时前
Go 手写有界 SPSC 环形队列:无 CAS、无锁、Cache 友好的无锁模型
后端·go
咕白m62516 小时前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
唐青枫16 小时前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
Java编程爱好者16 小时前
放弃 Spring AI?这 3 个开源框架,才是让 SpringBoot 玩转 AI Agent 的正解
后端
二月龙16 小时前
伪类与伪元素深度解析:before/after 实用案例
后端