连载中 16/18

自定义 Starter:把公司组件装进 Boot 的标准件

2026-11-10 · 25 阅读 · 0 评论 · 0 赞

每个新项目都在复制粘贴

公司每个新项目都要复制一遍短信工具类、改一遍配置、踩一遍一样的坑——这就是该做成 Starter 的信号:把组件连同默认配置封装成一个依赖,新项目引一下、写两行配置就能用。这篇用三十行代码走完全程。

先立规矩:命名与结构

官方 Starter 叫 spring-boot-starter-xxx;第三方(自己公司)用 xxx-spring-boot-starter,比如 sms-spring-boot-starter,一眼区分来源。工程结构不复杂,一个模块装三样东西:Properties 类(绑定配置项)、AutoConfiguration 类(装配入口)、服务本体(真正干活的类),再加一个注册文件。

三段代码走完全程

// 1. 配置属性:application.yml 里 sms 前缀的配置自动绑进来
@ConfigurationProperties(prefix = "sms")
public class SmsProperties {

    /** 网关地址 */
    private String url;

    /** 应用密钥 */
    private String secret;

    // getter / setter 省略
}

// 2. 自动配置类:负责把 Bean 装进容器
@AutoConfiguration
@EnableConfigurationProperties(SmsProperties.class)
@ConditionalOnClass(SmsClient.class)
public class SmsServiceAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public SmsService smsService(SmsProperties properties) {
        return new SmsService(properties.getUrl(), properties.getSecret());
    }
}
# 3. 注册文件:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
# 内容就一行,每行一个自动配置类的全限定名
com.example.sms.SmsServiceAutoConfiguration

发布到私服之后,使用方三步接入:引依赖、写配置、注入使用——工具类不存在了,坑也不再重复踩。

# 使用方的 application.yml
sms:
  url: https://gw.example.com/sms
  secret: your-key

三个设计细节

一,@ConditionalOnMissingBean 是留后门的艺术:默认实现给你,但用户随时可以自己定义同类型 Bean 覆盖——Starter 只做默认值,不做独裁者,这正是上一篇讲的用户优先原则。二,配置提示:工程里引入 spring-boot-configuration-processor 依赖重新编译,IDE 里写 sms.url 会有自动补全和注释提示。三,可选依赖打 tag:真正可选的第三方客户端用 optional 依赖引入,@ConditionalOnClass 才有存在意义——没引客户端的工程,Starter 自动隐身。

下一篇盘点 Spring 里那些低调的扩展点:不动框架源码,也能在关键位置装上自己的钩子。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#Spring Boot#Starter#自动装配#组件封装

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10134 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9899 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9329 阅读 · 21 评论 · 287 赞