You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找特定Spring Boot Starter激活的自动配置类及激活原理

Spring Boot引入Starter后自动配置类的激活逻辑

所有官方Starter本身都不包含Java实现代码,唯一作用是通过Maven依赖传递,把对应场景所需的全部依赖jar统一拉到项目classpath中。spring-boot-starter-security和SecurityAutoConfiguration的关联也建立在这个机制上——SecurityAutoConfiguration根本不在starter的jar包内,而是在starter传递引入的spring-boot-security-autoconfigure依赖中。

完整激活流程

整个过程没有黑魔法,拆成3个核心环节:

1. 依赖传递凑齐激活前提

你在pom.xml中加入如下依赖后:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Maven会自动解析这个starter的pom文件,把它声明的所有传递依赖(包括Spring Security核心包、Security自动配置包等)全部引入到项目里。这一步的作用就是把自动配置类本身、以及自动配置类运行需要的所有相关类都放到项目classpath下,凑齐后续自动配置激活的前提条件。

2. Spring Boot启动时扫描所有自动配置候选类

项目启动时,主启动类上的@SpringBootApplication注解内部组合了@EnableAutoConfiguration注解,这个注解会通过@Import导入AutoConfigurationImportSelector处理器,执行自动配置扫描逻辑:

  • 它会遍历当前项目classpath下所有jar包中的固定路径配置文件:Spring Boot 2.7+版本读取META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,2.7及更早版本读取META-INF/spring.factories中EnableAutoConfiguration对应的配置项
  • 把配置文件中列出的所有自动配置类全限定名收集起来,形成自动配置候选列表
  • 前面提到的spring-boot-security-autoconfigure包的对应配置文件里,就明确写了SecurityAutoConfiguration的全类名,这一步就把这个类纳入了待加载的候选范围。

3. 条件校验后真正激活配置类

收集到的候选类不会全部直接生效,每个自动配置类上都标注了一系列条件注解,只有所有条件都满足,这个配置类才会被真正解析、注册到Spring容器中,常用的条件注解包括:

  • @ConditionalOnClass:要求classpath中存在指定的类才生效,比如SecurityAutoConfiguration上就标注了需要存在Spring Security的核心过滤器、核心配置类等,starter传递进来的依赖刚好满足这个要求
  • @ConditionalOnMissingBean:要求Spring容器中不存在用户自定义的对应类型Bean才生效,避免自动配置覆盖用户自己写的自定义逻辑
  • @ConditionalOnWebApplication:要求当前项目是Web应用才生效,匹配Security的Web安全场景
    当所有条件都满足时,SecurityAutoConfiguration就会被激活,自动向容器中注册默认的安全拦截规则、默认登录页、默认用户密码生成器等一系列Bean,开箱即用的安全能力就生效了。

内容的提问来源于stack exchange,提问作者mhrsalehi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:09:21