Spring Boot 自动装配的原理是什么?

74 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

先看看 Spring Boot 的主配置类:

image-20220331213244122.png

里面有一个main方法执行了一个 run() 方法,在 run() 方法中必须传入一个被 @SpringBootApplication 注解的类

  • @SpringBootApplication
 Spring 应用标注在某个类上说明这个了类是 SpringBoot 的主配置类,SpringBoot 就会运行这个类的 main 方法来启动项目。

@SpringBootApplication注解是一个组合注解,它是由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解组合而成的

image-20220331214750370.png

  • @SpringBootConfiguration

这个注解表明,该类是一个Spring的配置类,而@Configuration则表明Spring配置类也是Spring的一个组件

image-20220331214923835.png

  • @EnableAutoConfiguration

@EnableAutoConfiguration这个注解是用来开启自动配置的功能

image-20220331215406761.png

@AutoConfigurationPackage这个注解是用来自动配置包,主要是使用@Import来给Spring容器导入一个组件,这里导入的是Registrar.class。就是通过这个方法获取到扫描的包路径

image-20220331215804450.png

image-20220331215945771.png

而metadata就是标注了@SpringBootApplication注解的ActuatorApplication,也就是主配置类

image-20220331220107084.png

说白了就是将主配置类所在的包以及子包里面所有组件扫描加载到Spring容器

@Import(AutoConfigurationImportSelector.class)

这个注解主要是给Spring容器导入一些组件,这里是AutoConfigurationImportSelector,里面的selectImports方法会将所有需要导入的组件以全限定名的方式返回

image-20220331220927106.png

而所需要的配置则是从spring.factories中获取

image-20220331221134355.png

image-20220331221228728.png