SpringBoot 自动装配
SpringBoot 自动装配的效果

- 1、添加
spring-boot-starter依赖 - 2、在配置文件中编写配置(一部分自动装配的依赖有默认配置)
- 3、项目启动时,会自动将引入依赖注入到 IOC 容器中,需要使用时直接使用即可
自动装配基本原理
核心机制:@EnableAutoConfiguration
java
// Spring Boot 应用启动入口
@SpringBootApplication // 这个注解包含 @EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}@SpringBootApplication 注解的组成
java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration // 🔥 关键:启用自动配置
@ComponentScan
public @interface SpringBootApplication {
// ...
}自动配置的工作流程
- 1、启动 Spring Boot 应用
- 2、加载
META-INF/spring.factories文件,Spring boot 3 是META-INF/spring.org.springframework.boot.autoconfigure.AutoConfiguration.imports文件 - 3、找到所有
org.springframework.boot.autoconfigure.EnableAutoConfiguration配置 - 4、根据条件(@Conditional)过滤掉不满足的配置类
- 5、加载满足条件的自动配置类
- 6、自动配置类创建相应的 Bean
- 7、应用启动完成
自动配置的核心注解
@AutoConfiguration 注解
Spring Boot 2.7+ 推荐使用 @AutoConfiguration,标记这是一个自动配置类,@AutoConfiguration 包含 @Configuration
- 1、@AutoConfiguration 会自动被 Spring Boot 发现和加载
- 2、通常在 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中注册
- 3、支持自动排序和条件处理
java
@AutoConfiguration // 标记这是一个自动配置类
@ConditionalOnClass(DataSource.class) // 当 DataSource 类存在时
@ConditionalOnMissingBean(DataSource.class) // 且没有 DataSource Bean 时
@EnableConfigurationProperties(DataSourceProperties.class) // 启用配置属性
public class DataSourceAutoConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(DataSourceProperties properties) {
// 自动创建 DataSource Bean
return properties.initializeDataSourceBuilder().build();
}
}Spring Boot 2:spring.factories
java
# META-INF/spring.factories
# 传统方式:在 spring.factories 中声明自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration,\
com.example.AnotherAutoConfiguration
# 自动配置的顺序控制
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
com.example.CustomAutoConfigurationFilter
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
com.example.CustomAutoConfigurationListener
# 自动配置的排除
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.config.MyAutoConfigurationSpring Boot 3
Spring Boot 2.7+ 新方式:使用 imports 文件
java
/*
文件位置:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
内容:
com.example.MyAutoConfiguration
*/
// 对应的自动配置类
@AutoConfiguration
public class MyAutoConfiguration {
// 配置内容
}
朔风