SpringBoot自动化配置-源码跟踪

源码跟踪

核心架构:一个核心注解 + 一个启动方法

@SpringBootApplication

作用: 标注在主启动类上

本质: 复合注解,包含以下三个关键注解

  • @SpringBootConfiguration

    • 底层是 @Configuration

    • 表明启动类本身也是一个配置类,可以在其内部定义相关的 @Bean

  • @ComponentScan

    • 表示组件扫描

    • 默认会扫描启动类包以及子包下Spring能识别的组件

  • @EnableAutoConfiguration

    • 启用 Spring Boot 自动配置

    • 底层依赖于 @Import(AutoConfigurationImportSelector.class)

@EnableAutoConfiguration 工作流程

  1. 底层是一个 @Import 注解,该注解中导入了 AutoConfigurationImportSelector.class
  2. 调用 AutoConfigurationImportSelector.selectImports()
  3. 内部调用 getAutoConfigurationEntry()
  4. 通过 getCandidateConfigurations() 加载自动配置类
    • META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  5. 过滤候选配置类
    • 依据条件注解如 @ConditionalOnClass
    • 检查项目依赖和排除项
  6. 最终,将满足条件的自动配置类的全类名封装成一个字符串数组

SpringApplication.run()

作用: 启动应用,创建并初始化 Spring 容器 ApplicationContext

执行流程

  1. 初始化 Spring 容器时,处理 @EnableAutoConfiguration 导入的自动配置类
  2. 将筛选后的自动配置类加载到内存
  3. 解析自动配置类中的定义(@Bean, @Conditional 等)
  4. 创建符合条件的 Bean 并注册到 IoC 容器

完整流程总结

  1. 执行 SpringApplication.run() 启动应用
  2. 解析启动类上的 @SpringBootApplication
  3. @EnableAutoConfiguration 触发 AutoConfigurationImportSelector
  4. 加载并筛选 AutoConfiguration.imports 中的自动配置类
  5. 导入筛选后的自动配置类
  6. Spring 容器初始化时处理这些类
  7. 执行自动配置类逻辑,创建并注册符合条件的 Bean
  8. 应用启动完成,可直接使用自动配置的 Bean(如 DataSource, MVC 组件等)
posted @ 2025-07-21 20:45  Breezy_space  阅读(5)  评论(0)    收藏  举报