导读:本期聚焦于小伙伴创作的《如何通过 Spring Boot 的 AutoConfigurationImportFilter 过滤不必要的自动装配以提升启动速度》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何通过 Spring Boot 的 AutoConfigurationImportFilter 过滤不必要的自动装配以提升启动速度》有用,将其分享出去将是对创作者最好的鼓励。

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

如何通过 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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。