JAVA面试题学习8 - Spring Boot 自动配置原理
当 Spring Boot 启动时会执行SpringApplication.run()方法该方法会加载 Spring 容器并解析SpringBootApplication注解。SpringBootApplication是一个复合注解它包含SpringBootConfiguration、ComponentScan和EnableAutoConfiguration三个核心注解SpringBootConfiguration会将启动类标记为配置类从而解析其中的ComponentScanEnableAutoConfiguration底层使用了Import注解去导入一个自动配置类的选择器AutoConfigurationImportSelector这个选择器会通过 SPI 机制加载所有自动配置类位于META-INF/spring.factories或META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中SPIService Provider Interface原理SPI 是 Java 提供的一种服务发现机制允许框架或应用程序在运行时动态加载实现类。其核心思想是“面向接口编程 配置文件约定”。实现方式服务提供者如各种 Spring Boot Starter在META-INF/services/目录下创建一个以接口全限定名命名的文件文件中写入实现类的全限定名。在 Spring Boot 中这一机制被扩展用于spring.factories和AutoConfiguration.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 和配置。