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 自动配置原理,你应该能明白了吧
每日3分钟技术干货 | 面试题+答案 | SpringBoot篇