Spring Boot 自动装配原理是如何实现的
# 什么是自动装配?
自动装配是 Spring Boot 的核心,一般提到自动装配就会和 Spring Boot 联系在一起。实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。
Spring Boot 定义了一套接口规范,这套规范规定:Spring Boot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories
文件,将文件中配置的类型信息加载到 Spring 容器,并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 Spring Boot 定义的标准,就能将自己的功能装置进 Spring Boot。
其实一个最好的体现就是 starter ,比如你想要在项目中使用 redis 的话,直接在项目中引入对应的 starter 即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1
2
3
4
2
3
4
引入 starter 之后,我们通过少量注解和一些简单的配置就能使用第三方组件提供的功能了。
所以可以简单的理解:Spring Boot 的自动配置 就是为了帮助我们最快、最简单的去使用组件
# Spring Boot 自动装配的原理是什么样的?
这里我们基于 Spring Boot 2.7.2 的版本来说明一下
启动类的@SpringBootApplication
注解由@SpringBootConfiguration
,@EnableAutoConfiguration
,@ComponentScan
三个注解组成,三个注解共同完成自动装配;
这三个注解的作用如下:
@SpringBootConfiguration
注解标记启动类为配置类@ComponentScan
注解实现启动时扫描启动类所在的包以及子包下所有标记为 bean 的类由 IOC 容器注册为 bean@EnableAutoConfiguration
通过@Import
注解导入AutoConfigurationImportSelector
类,然后通过AutoConfigurationImportSelector
类的selectImports
方法去读取需要被自动装配的组件依赖下的spring.factories
文件配置的组件的类全名,并按照一定的规则过滤掉不符合要求的组件的类全名,将剩余读取到的各个组件的类全名集合返回给 IOC 容器并将这些组件注册为 bean
上次更新: 2023/01/16, 18:12:53