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依赖管理和自动配置源码分析
相关文章
- 使用tomcat启动SpringBoot项目
- SpringBoot:详解@SpringBootApplication注解和SpringApplication执行流程
- SpringBoot之添加单元测试
- [springboot, lettuce] io.lettuce.core.RedisCommandTimeoutException: Command timed out after
- SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
- SpringBoot2 | SpringBoot启动流程源码分析(一)
- 接私活/工作必备-SpringBoot+Elastic-Job的快速启动Demo
- 《SpringBoot篇》14.@AutoConfigureMockMvc测试类实现Web层测试
- 《SpringBoot篇》01.Springboot超详细入门(基础篇)
- SpringBoot中的日志
- Java学习-086-Springboot 自定义启动 banner 信息
- Java学习-060-Springboot - 找不到或无法加载主类 com.fanfengping.FanfengpingNfsApplication 解决方法之一:JDK环境
- 微信小程序获取openid用springboot
- Springboot 整合 MyBatisPlus「详细过程」
- SpringBoot 整合 SpringMvc 流程以及原理
- Spring中Bean的加载与SpringBoot的初始化流程详解
- SpringBoot集合SpringSecurity流程及代码详解和导图详解
- SpringBoot整合支付宝支付流程及ISV权限不足的解决
- springboot项目打包、部署Tomcat流程详解
- SpringBoot与SpringCloud对应版本及官方查询方法
- SpringBlade IDEA 配置SpringBoot多环境启动