Spring Boot Starter是“依赖+配置”的标准化打包方案,由依赖聚合模块(pom.xml)和自动配置模块(含@Conditional注解的配置类)组成,通过META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件声明配置类,启动时按条件(如@ConditionalOnClass、@ConditionalOnMissingBean)自动装配Bean,实现开箱即用。

Spring Boot 的 starter 是一种“依赖+配置”的打包方式,不是功能代码本身,而是一套标准化的接入方案。它把某类技术栈所需的全部依赖、默认配置逻辑、条件化装配规则打包在一起,开发者引入一个 starter,就能自动获得开箱即用的能力。
starter 的组成结构很清晰
一个典型的 starter(比如 spring-boot-starter-web)实际由两部分构成:
-
依赖聚合模块:仅含
pom.xml,声明所有必需依赖(如 Spring MVC、Tomcat、Jackson),并统一管理版本,避免冲突; -
自动配置模块(
xxx-spring-boot-starter-autoconfigure):包含真正的配置类(如WebMvcAutoConfiguration)、@ConditionalOnClass等条件注解、以及默认 Bean 的定义逻辑。
starter 怎么被 Spring Boot 发现并加载
核心靠的是 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件(Spring Boot 3.2+ 替代了旧版 spring.factories)。这个文件列出了所有该 starter 提供的自动配置类。
启动时,Spring Boot 扫描所有 jar 包中的这个文件,读取配置类列表,再结合当前环境判断是否启用——比如只有类路径里存在 DispatcherServlet,WebMvcAutoConfiguration 才会生效。
立即学习“Java免费学习笔记(深入)”;
自动配置背后的条件控制是关键
配置类不是无脑加载的,而是通过一系列条件注解精准触发:
-
@ConditionalOnClass:要求某个类在 classpath 中存在(如引入了spring-webmvc才配 Web); -
@ConditionalOnMissingBean:只在用户没自定义同类型 Bean 时才创建默认实例; -
@ConditionalOnProperty:根据application.yml中的开关(如spring.redis.enabled=true)决定是否启用; -
@ConditionalOnResource:检查是否存在某个配置文件或资源。
为什么 starter 能大幅减少手动配置
以集成 Redis 为例:
- 传统做法:手动加 Lettuce/Jedis、配
RedisConnectionFactory、写RedisTemplateBean、处理序列化、考虑缓存 Manager……容易遗漏或出错; - 用
spring-boot-starter-data-redis:只加一行依赖,Spring Boot 就自动完成连接工厂初始化、模板注册、缓存支持,甚至兼容@Cacheable注解。
本质是把“人脑记忆的集成步骤”,转化成了可复用、可验证、可演进的代码契约。


















