SpringBoot自动化配置-源码跟踪
源码跟踪
核心架构:一个核心注解 + 一个启动方法
@SpringBootApplication
作用: 标注在主启动类上
本质: 复合注解,包含以下三个关键注解
-
@SpringBootConfiguration-
底层是
@Configuration -
表明启动类本身也是一个配置类,可以在其内部定义相关的
@Bean
-
-
@ComponentScan-
表示组件扫描
-
默认会扫描启动类包以及子包下Spring能识别的组件
-
-
@EnableAutoConfiguration-
启用 Spring Boot 自动配置
-
底层依赖于
@Import(AutoConfigurationImportSelector.class)
-
@EnableAutoConfiguration 工作流程
- 底层是一个
@Import注解,该注解中导入了AutoConfigurationImportSelector.class - 调用
AutoConfigurationImportSelector.selectImports() - 内部调用
getAutoConfigurationEntry() - 通过
getCandidateConfigurations()加载自动配置类META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
- 过滤候选配置类
- 依据条件注解如
@ConditionalOnClass - 检查项目依赖和排除项
- 依据条件注解如
- 最终,将满足条件的自动配置类的全类名封装成一个字符串数组。
SpringApplication.run()
作用: 启动应用,创建并初始化 Spring 容器 ApplicationContext。
执行流程
- 初始化 Spring 容器时,处理
@EnableAutoConfiguration导入的自动配置类 - 将筛选后的自动配置类加载到内存
- 解析自动配置类中的定义(
@Bean,@Conditional等) - 创建符合条件的 Bean 并注册到 IoC 容器
完整流程总结
- 执行
SpringApplication.run()启动应用 - 解析启动类上的
@SpringBootApplication @EnableAutoConfiguration触发AutoConfigurationImportSelector- 加载并筛选
AutoConfiguration.imports中的自动配置类 - 导入筛选后的自动配置类
- Spring 容器初始化时处理这些类
- 执行自动配置类逻辑,创建并注册符合条件的 Bean
- 应用启动完成,可直接使用自动配置的 Bean(如 DataSource, MVC 组件等)

浙公网安备 33010602011771号