JAVA面试题学习8 - Spring Boot 自动配置原理

📅 2026/7/26 22:43:04 👁️ 阅读次数 📝 编程学习
JAVA面试题学习8 - Spring Boot 自动配置原理

当 Spring Boot 启动时,会执行SpringApplication.run()方法,该方法会加载 Spring 容器,并解析@SpringBootApplication注解。

@SpringBootApplication是一个复合注解,它包含@SpringBootConfiguration@ComponentScan@EnableAutoConfiguration三个核心注解:

  • @SpringBootConfiguration会将启动类标记为配置类,从而解析其中的@ComponentScan
  • @EnableAutoConfiguration底层使用了@Import注解去导入一个自动配置类的选择器(AutoConfigurationImportSelector),这个选择器会通过 SPI 机制加载所有自动配置类(位于META-INF/spring.factoriesMETA-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中);
    • SPI(Service Provider Interface)原理:SPI 是 Java 提供的一种服务发现机制,允许框架或应用程序在运行时动态加载实现类。其核心思想是“面向接口编程 + 配置文件约定”。
    • 实现方式:服务提供者(如各种 Spring Boot Starter)在META-INF/services/目录下创建一个以接口全限定名命名的文件,文件中写入实现类的全限定名。在 Spring Boot 中,这一机制被扩展用于spring.factoriesAutoConfiguration.imports文件。
    • 加载过程AutoConfigurationImportSelector会使用SpringFactoriesLoader.loadFactoryNames()方法扫描 classpath 下所有 jar 包中的META-INF/spring.factories文件,读取org.springframework.boot.autoconfigure.EnableAutoConfiguration键对应的自动配置类全名列表。
    • 优势:实现了自动配置类的解耦和可插拔。第三方 Starter 只需按照约定提供配置文件,无需修改 Spring Boot 核心代码,即可被自动发现和加载。
  • 并不是所有自动配置类都会生效,Spring Boot 会根据@Conditional系列的注解(如@ConditionalOnClass@ConditionalOnMissingBean等)进行条件过滤;
  • 最终,满足条件的自动配置类会被解析并注册到 Spring 容器中,后续这些配置类就能生效,为应用提供默认的 Bean 和配置。