2分钟明白springboot自动配置流程

Posted 364.99°

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2分钟明白springboot自动配置流程相关的知识,希望对你有一定的参考价值。

1.自动配置流程

配置流程:

核心注解

2.简单看一下源码

找到springboot项目的启动类,ctrl鼠标左键点击springboot的核心注解 @SpringBootApplication

可以看到 @SpringBootApplication 的底层注解有三个,其他四个是元注解,用来自定义注解的,想了解可以看这篇文章——Java注解

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

这三个注解,用来进行自动配置的注解是@EnableAutoConfiguration,其余两个 @SpringBootConfiguration 用来声明这是一个配置类(其底层是 @Configuration),@ComponentScan 指定要扫描哪些包,默认是 启动类同一包及其子包中的组件(就是扫描自己要注册到IOC容器的组件)。

接下来看@EnableAutoConfiguration,其底层注解有 @AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)

@AutoConfigurationPackage 的作用就是就是将 @ComponentScan 扫描到的包注册到IOC容器

所以,真正实现自动配置的还是 @Import(AutoConfigurationImportSelector.class)

进入 AutoConfigurationImportSelector 类,继续追踪,可以追踪到一个类 SpringFactoriesLoader ,这个类的 loadSpringFactories(ClassLoader classLoader) 方法中有如下一段代码:

Enumeration urls = classLoader.getResources("META-INF/spring.factories");

META-INF/spring.factories 中加载到文件的,即默认扫描我们当前系统中所有 META-INF/spring.factories 中的文件,这个文件中定义了所有配置类。

这些配置类在启动 main 方法的时候会全部被加载(springboot2.6.7有137个加载的配置文件),但是最终只会按需配置30个左右,这主要是因为 @Conditionalxxx ,这个注解 按照条件配置的规则,很多不满足条件的场景不会被加载

具体的源码分析可以看这篇文章——springboot依赖管理和自动配置源码分析

以上是关于2分钟明白springboot自动配置流程的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot自动配置的实现原理

这样讲 SpringBoot 自动配置原理,你应该能明白了吧

每日3分钟技术干货 | 面试题+答案 | SpringBoot篇

基于springboot微信公众号开发,几分钟学会微信自动回复

SpringBoot自动装配流程源码分析

Spring Boot 返回 XML 数据,一分钟搞定!