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自动装配的原理图如下:

相关推荐
java1234_小锋3 分钟前
Java高频面试题:Spring-AOP通知和执行顺序?
java·开发语言·spring
番茄去哪了7 分钟前
Java基础面试题day02
java·开发语言·面向对象编程
我是咸鱼不闲呀23 分钟前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论
1104.北光c°23 分钟前
深入浅出 Elasticsearch:从搜索框到精准排序的架构实战
java·开发语言·elasticsearch·缓存·架构·全文检索·es
MSTcheng.29 分钟前
【优选算法必修篇——位运算】『面试题 01.01. 判定字符是否唯一&面试题 17.19. 消失的两个数字』
java·算法·面试
蹦哒31 分钟前
Kotlin 与 Java 语法差异
java·python·kotlin
SmartBrain32 分钟前
Spring Boot的高性能技术栈的工程实践
spring boot·后端·架构
左左右右左右摇晃32 分钟前
Java并发——并发编程底层原理
java·开发语言
一个有温度的技术博主38 分钟前
Redis系列八:Jedis连接池在java中的使用
java·redis·bootstrap
cyforkk40 分钟前
Java 并发编程教科书级范例:深入解析 computeIfAbsent 与方法引用
java·开发语言