搜索 K
Appearance
Appearance
Spring Boot 让业务模块无需写任何 @Bean 即可获得第三方 starter 提供的能力,这套机制叫「自动装配」。框架开发者负责声明「哪些 @Configuration 在用户应用启动时自动生效」。
| API / 文件 | 用途 |
|---|---|
@AutoConfiguration | 标记一个 @Configuration 为自动装配类(Spring Boot 2.7+ 引入,替代 @Configuration 直接挂在 spring.factories) |
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 自动装配类的注册清单,一行一个全限定类名(Spring Boot 2.7+ 取代 META-INF/spring.factories) |
AutoConfigurationPackages | 在自动装配生效时由 @AutoConfigurationPackage(含在 @SpringBootApplication 里)记录的“基础包列表”,常用于「让 starter 知道用户的扫描根包」 |
不再使用 spring.factories
Spring Boot 3.x 已彻底废弃 META-INF/spring.factories 作为自动装配入口,必须使用新的 AutoConfiguration.imports。本项目基于 Spring Boot 3.5.4,所以走的就是新方式。
@AutoConfiguration
@ComponentScan(basePackageClasses = MyAutoConfiguration.class)
public class MyAutoConfiguration {
// 可在此声明 @Bean,也可让 @ComponentScan 把同包下的 @Component 装配进来
}文件路径:src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
com.example.MyAutoConfigurationList<String> packages = AutoConfigurationPackages.get(beanFactory);
// 通常返回用户 @SpringBootApplication 所在包,例如 ["com.user.app"]只要用户的启动类用了 @SpringBootApplication(内含 @AutoConfigurationPackage),Spring Boot 就会注册该启动类所在包为「基础包」。第三方 starter 可以直接消费它,省得让用户再配一遍 scanBasePackages。
forge-ddl 模块的入口非常薄:
// DdlAutoConfiguration.java
@AutoConfiguration
@ComponentScan(basePackageClasses = DdlAutoConfiguration.class)
public class DdlAutoConfiguration {
}# META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
cn.cvking.forge.ddl.DdlAutoConfiguration业务模块的 pom.xml 引入 forge-ddl 依赖后,Spring Boot 启动时:
AutoConfiguration.imports 文件DdlAutoConfiguration 注册为配置类@ComponentScan 把 ClazzScanner / ModelRegistry / DdlInitializer 三个 @Component 注册为 BeanDdlInitializer 在容器装配完成后被 callRunners() 触发,调用 AutoConfigurationPackages.get(beanFactory) 拿到用户启动类所在包,作为扫描根整个过程业务方无须写任何配置。
→ 详细见 《整体架构》