|
此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Boot 3.5.5! |
Kotlin 支持
Spring Boot 通过利用其他 Spring 项目(例如 Spring Framework、Spring Data 和 Reactor)中的支持来提供 Kotlin 支持。有关更多信息,请参阅 Spring Framework Kotlin 支持文档。
开始使用 Spring Boot 和 Kotlin 的最简单方法是按照这个综合教程进行作。您可以使用 start.spring.io 创建新的 Kotlin 项目。请随时加入 Kotlin Slack 的 #spring 频道或使用spring和kotlin标签,如果您需要支持。
要求
Spring Boot 至少需要 Kotlin 1.7.x,并通过依赖管理管理合适的 Kotlin 版本。要使用 Kotlin,org.jetbrains.kotlin:kotlin-stdlib和org.jetbrains.kotlin:kotlin-reflect必须存在于类路径上。 这kotlin-stdlib变种kotlin-stdlib-jdk7和kotlin-stdlib-jdk8也可以使用。
由于 Kotlin 类默认是最终的,因此您可能希望配置 kotlin-spring 插件,以便自动打开带 Spring 注释的类,以便可以代理它们。
在 Kotlin 中序列化/反序列化 JSON 数据需要 Jackson 的 Kotlin 模块。在类路径上找到它时会自动注册。如果 Jackson 和 Kotlin 存在,但 Jackson Kotlin 模块不存在,则会记录一条警告消息。
| 如果有人在 start.spring.io 上引导 Kotlin 项目,则默认会提供这些依赖项和插件。 |
零安全
Kotlin 的主要功能之一是空安全。它处理null值,而不是将问题推迟到运行时并遇到NullPointerException. 这有助于消除常见的错误来源,而无需支付包装器的成本,例如Optional. Kotlin 还允许使用具有可空值的函数式构造,如本 Kotlin 中空安全综合指南中所述。
尽管 Java 不允许在其类型系统中表达 null 安全性,但 Spring Framework、Spring Data 和 Reactor 现在通过工具友好的注释提供其 API 的 null 安全性。默认情况下,Kotlin 中使用的 Java API 中的类型被识别为放宽空检查的平台类型。Kotlin 对 JSR 305 注解的支持与可空性注解相结合,为 Kotlin 中的相关 Spring API 提供了空安全性。
可以通过添加-Xjsr305compiler 标志,并带有以下选项:-Xjsr305={strict|warn|ignore}. 默认行为与-Xjsr305=warn. 这strictvalue 需要在从 Spring API 推断的 Kotlin 类型中考虑 null 安全性,但应该知道 Spring API 可空性声明即使在次要版本之间也可能发生变化,并且将来可能会添加更多检查)。
Kotlin API
运行应用程序
Spring Boot 提供了一种惯用的方式来运行应用程序runApplication<MyApplication>(*args)如以下示例所示:
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
这是SpringApplication.run(MyApplication::class.java, *args).
它还允许自定义应用程序,如以下示例所示:
runApplication<MyApplication>(*args) {
setBannerMode(OFF)
}
扩展
Kotlin 扩展提供了使用附加功能扩展现有类的能力。 Spring Boot Kotlin API 利用这些扩展为现有 API 添加新的 Kotlin 特定便利。
TestRestTemplate扩展,类似于 Spring Framework 提供的扩展RestOperations在 Spring Framework 中,都提供了。
除其他外,扩展可以利用 Kotlin 具体化类型参数。
依赖关系管理
为了避免在类路径上混合不同版本的 Kotlin 依赖项,Spring Boot 导入了 Kotlin BOM。
使用 Maven,可以通过将kotlin.version提供属性和插件管理kotlin-maven-plugin.
使用 Gradle,Spring Boot 插件会自动对齐kotlin.version替换为 Kotlin 插件的版本。
Spring Boot 还通过导入 Kotlin 协程 BOM 来管理协程依赖项的版本。
可以通过设置kotlin-coroutines.version财产。
org.jetbrains.kotlinx:kotlinx-coroutines-reactor如果一个引导一个 Kotlin 项目,并且至少有一个对 start.spring.io 的响应式依赖项,则默认情况下会提供依赖项。 |
@ConfigurationProperties
@ConfigurationProperties当与构造函数结合使用时,绑定支持具有不可变的数据类val属性,如以下示例所示:
@ConfigurationProperties("example.kotlin")
data class KotlinExampleProperties(
val name: String,
val description: String,
val myService: MyService) {
data class MyService(
val apiToken: String,
val uri: URI
)
}
由于它们与 Java 互作性的限制,对值类的支持是有限的。 特别是,依赖值类的默认值将不适用于配置属性绑定。 在这种情况下,应改用数据类。
测试
虽然可以使用 JUnit 4 来测试 Kotlin 代码,但默认情况下提供 JUnit 5,建议使用。
JUnit 5 允许对测试类进行一次实例化,并重用于该类的所有测试。
这使得使用@BeforeAll和@AfterAll非静态方法的注释,非常适合 Kotlin。
要模拟 Kotlin 类,建议使用 MockK。
如果您需要MockK相当于 Mockito 特定的@MockitoBean和@MockitoSpyBean注释,您可以使用 SpringMockK 提供类似的@MockkBean和@SpykBean附注。
资源
例子
-
spring-boot-kotlin-demo:常规 Spring Boot + Spring Data JPA 项目
-
mixit:Spring Boot 2 + WebFlux + 响应式 Spring Data MongoDB
-
spring-kotlin-fullstack:WebFlux Kotlin 全栈示例,前端使用 Kotlin2js 而不是 JavaScript 或 TypeScript
-
spring-petclinic-kotlin:Spring PetClinic 示例应用程序的 Kotlin 版本
-
spring-kotlin-deepdive:从 Boot 1.0 + Java 到 Boot 2.0 + Kotlin 的分步迁移
-
spring-boot-coroutines-demo:协程示例项目