Spring Boot 的自动装配会在应用启动时扫描所有符合条件的自动配置类并完成初始化,当项目依赖较多时,很多自动配置类实际并不会被用到,却依然会占用启动时间和内存资源。通过自定义 AutoConfigurationImportFilter 可以提前过滤掉这些不需要的自动配置类,减少不必要的初始化流程。

AutoConfigurationImportFilter 的作用机制
AutoConfigurationImportFilter 是 Spring Boot 自动配置导入流程中的过滤器接口,它的核心作用是在自动配置类被正式导入 Spring 容器之前,对候选的自动配置类进行筛选。只有通过了过滤器校验的自动配置类,才会进入后续的配置加载和初始化流程。
Spring Boot 在启动时会先收集所有自动配置类的候选列表,然后遍历所有注册的 AutoConfigurationImportFilter 实例,对每个候选自动配置类调用过滤方法,最终只保留返回 true 的配置类。
自定义 AutoConfigurationImportFilter 实现步骤
1. 实现 AutoConfigurationImportFilter 接口
我们需要创建一个类实现 AutoConfigurationImportFilter 接口,重写其中的 match 方法,在该方法中定义过滤规则。
import org.springframework.boot.autoconfigure.AutoConfigurationImportFilter;
import org.springframework.boot.autoconfigure.AutoConfigurationMetadata;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class CustomAutoConfigurationImportFilter implements AutoConfigurationImportFilter {
// 定义需要排除的自动配置类全限定名列表
private static final List<String> EXCLUDE_CONFIGURATIONS = Arrays.asList(
"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration",
"org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration"
);
@Override
public boolean[] match(String[] autoConfigurationClasses, AutoConfigurationMetadata autoConfigurationMetadata) {
boolean[] matches = new boolean[autoConfigurationClasses.length];
for (int i = 0; i < autoConfigurationClasses.length; i++) {
String configClass = autoConfigurationClasses[i];
// 如果配置类在排除列表中,返回false表示过滤掉
if (configClass != null && EXCLUDE_CONFIGURATIONS.contains(configClass)) {
matches[i] = false;
} else {
matches[i] = true;
}
}
return matches;
}
}
2. 注册自定义过滤器
上面的示例中已经使用了 @Component 注解,只要该过滤器类处于 Spring Boot 的组件扫描路径下,就会被自动注册到 Spring 容器中,无需额外配置。如果过滤器不在默认扫描路径下,也可以通过 @Import 注解手动导入。
3. 验证过滤效果
可以在应用启动时开启 Spring Boot 的自动配置调试日志,查看自动配置类的加载情况,确认需要排除的配置类是否已经被过滤。
在 application.properties 中添加如下配置:
debug=true
启动应用后,在日志中搜索 Positive matches 和 Negative matches 部分,就可以看到最终生效和未生效的自动配置类列表。
注意事项
- 排除自动配置类前需要确认该类对应的功能确实不会被使用,避免排除必要的配置导致功能异常。
- AutoConfigurationImportFilter 的过滤逻辑会在自动配置类导入前执行,此时很多 Spring 上下文的信息还没有初始化,不要依赖上下文中的 Bean 来编写过滤规则。
- 如果有多个 AutoConfigurationImportFilter 实例,它们会按照注册顺序依次执行,最终所有过滤器都返回 true 的配置类才会被保留。
与 exclude 属性的区别
Spring Boot 的 @SpringBootApplication 注解提供了 exclude 属性,也可以排除自动配置类,但是这种方式需要手动指定要排除的类,当排除的配置较多时维护成本较高。而 AutoConfigurationImportFilter 可以通过逻辑批量筛选,更适合有统一过滤规则的场景。
| 方式 | 优点 | 缺点 |
|---|---|---|
| @SpringBootApplication exclude | 配置简单,直观明确 | 需要手动逐个指定,不适合批量排除 |
| AutoConfigurationImportFilter | 支持批量逻辑筛选,灵活性高 | 需要编写实现类,需要了解自动配置类的全限定名 |
Spring_BootAutoConfigurationImportFilter自动装配启动速度优化修改时间:2026-06-13 15:03:27