Kotlin DSL 构建 Spring Boot Starter

相关概念:kotlinspring-boot

用 Kotlin DSL 写 Spring Boot Starter,真正要抓住的不是语法,而是 Starter 自身的最小组成结构。

最小骨架

一个最基础的 Starter,通常就这几部分:

  • spring.factories 或等价自动装配入口
  • AutoConfiguration
  • @ConfigurationProperties
  • 业务 Bean

它们之间的关系可以理解成:

  • 自动装配入口把配置类暴露给 Spring
  • 配置类读取配置属性
  • 配置类再把业务 Bean 组装出来

实现路径

1. 定义配置属性类

@ConfigurationProperties(prefix = "simple.alarm.email")
data class EmailProperties(
  var host: String? = null,
  var senderEmail: String? = null,
  var senderPassword: String? = null,
  var receiverEmail: String? = null,
)

这里用 var 和默认值,不是形式问题,而是为了让 Spring 的配置绑定顺利工作。

2. 写业务 Bean

业务 Bean 本身保持简单,把依赖通过构造器吃进来。

3. 写自动配置类

自动配置类负责把 Properties 和业务 Bean 接起来。

4. 暴露自动装配入口

没有这一步,Starter 就只是一个普通 jar,不会被 Spring 自动发现。

Kotlin DSL 真正带来的变化

和 Groovy 版比起来,变化主要在构建脚本层:

  • 文件后缀变成 .kts
  • 类型提示更强
  • DSL 更靠近 Kotlin 本身的语法习惯

但 Starter 的设计原则本身并没有变。

提醒

写 Starter 时比“能跑”更重要的是边界清楚:

  • 什么配置开放给使用者
  • 哪些 Bean 应该自动创建
  • 什么条件下才装配

Starter 一旦边界模糊,后面维护会比普通业务代码更痛苦。