自定义 Starter 必须严格遵循命名规范({name}-spring-boot-starter)和三模块结构(autoconfigure、starter、可选 core),Spring Boot 3.2+ 使用 AutoConfiguration.imports 声明配置类,路径、格式、依赖作用域均需精确匹配,否则导致装配失败或 IDE 无提示。

要让自定义 Starter 被 Spring Boot 正确识别、自动装配且便于团队协作和版本治理,必须严格遵循命名与模块结构的双重规范——错一个字母或少一个模块,就可能触发条件装配失败、IDE 无提示、甚至启动时静默跳过配置。
Starter 的命名规范
第三方 Starter 必须使用 【{name}-spring-boot-starter】 格式,例如 greeting-spring-boot-starter 或 redis-lock-spring-boot-starter。这个命名不是建议,而是 Spring Boot 2.4+ 后通过 spring.factories 和 spring-boot-autoconfigure-processor 扫描机制所依赖的硬性标识。
若误用 spring-boot-starter-{name},Maven 会将其视为官方 Starter,导致 IDE 自动补全失效、Spring Boot Build Plugin 拒绝生成配置元数据、@ConfigurationPropertiesScan 无法定位属性类。
模块名中禁止出现下划线以外的特殊字符,连字符(-)可多用,但不能以数字开头,也不能含大写字母——MyCache-Starter 和 cache_starter 均不合法。
Starter 的标准模块结构
一个生产可用的 Starter 不是单个 jar 包,而是由三个物理模块组成的逻辑单元:autoconfigure 模块 + starter 模块 + (可选)core 模块。三者缺一不可,否则无法满足“开箱即用”和“按需加载”双重要求。
方法一:标准三模块结构(推荐)
① 先创建 {name}-spring-boot-autoconfigure 模块:它包含所有 @Configuration 类、@ConfigurationProperties 绑定类、条件注解(@ConditionalOnClass、@ConditionalOnMissingBean)、以及健康检查端点。该模块只依赖 spring-boot-autoconfigure 和功能所需的核心 API(如 spring-web),【严禁引入任何 starter 依赖】。
② 再创建 {name}-spring-boot-starter 模块:这是一个纯 pom 工程,packaging 设为 pom,只声明对 autoconfigure 模块和功能核心依赖(如 redis.clients:jedis)的 runtime 作用域引用。它自身不写一行 Java 代码。
将 Spring Boot 2.7 项目升级到 Spring Boot 3.5 的实战流程,覆盖版本基线、依赖坐标替换、Jakarta 迁移、配置兼容、异步上下文传递改造与验证门禁。用于企业多模块 Maven 项目升级与排障。
③ 最后按需创建 {name}-core 模块:当业务逻辑复杂、需被非 Spring 环境复用时才独立拆出,例如分布式锁的加锁/解锁原子操作封装。starter 模块通过 compile 作用域依赖它,autoconfigure 模块仅通过接口编程依赖其 API 包。
方法二:极简双模块结构(仅限 PoC 或内部工具)
将 autoconfigure 逻辑直接写在 starter 模块内,删去独立的 autoconfigure 工程。此时必须在 resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中显式声明配置类全限定名,且需手动添加 spring-boot-autoconfigure-processor 注解处理器依赖,否则 @ConfigurationProperties 的元数据不会生成。
这一步容易漏掉注解处理器,导致 application.yml 中无属性提示、spring.config.import 失效。
自动装配入口文件配置
Spring Boot 3.2+ 强制使用 spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 替代已废弃的 spring.factories。路径必须完整准确,文件必须放在 starter 模块的 src/main/resources 下。
文件内容只允许写一行全限定类名,例如:com.example.greeting.autoconf.GreetingAutoConfiguration。多写空行、注释、多余空格都会导致类加载失败。
如果使用旧版 Spring Boot(≤3.1),仍需保留 spring.factories,格式为:org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 换行后接配置类路径。注意反斜杠必须顶格,且换行符为 LF(Unix 风格)。










