Spring Boot Kotlin支持中文文档

本文为官方文档直译版本。原文链接

Spring Boot Kotlin支持中文文档

引言

Kotlin 是一种针对 JVM(和其他平台)的静态类型语言,可以编写简洁优雅的代码,同时提供与 Java 编写的现有库的互操作性

Spring Boot 通过利用其他 Spring 项目(如 Spring Framework、Spring Data 和 Reactor)中的支持来提供 Kotlin 支持。更多信息,请参阅 Spring Framework Kotlin 支持文档

开始使用 Spring Boot 和 Kotlin 的最简单方法就是遵循本综合教程。您可以使用 [start.spring.io](https://start.spring.io/#!language=kotlin) 创建新的 Kotlin 项目。如果需要支持,请随时加入 Kotlin Slack 的 #spring 频道,或在 Stack Overflow 上使用 springkotlin 标签提问。

所需条件

Spring Boot 至少需要 Kotlin 1.7.x,并通过依赖关系管理来管理合适的 Kotlin 版本。要使用 Kotlin,classpath 上必须有 org.jetbrains.kotlin:kotlin-stdliborg.jetbrains.kotlin:kotlin-reflect。还可以使用 kotlin-stdlib 变体 kotlin-stdlib-jdk7kotlin-stdlib-jdk8

由于 Kotlin 类默认为最终类,因此您可能需要配置 kotlin-spring 插件,以便自动打开 Spring 标注的类,从而代理它们。

在 Kotlin 中序列化/反序列化 JSON 数据需要使用 Jackson 的 Kotlin 模块。当在类路径上找到该模块时,它将自动注册。如果存在 Jackson 和 Kotlin,但没有 Jackson Kotlin 模块,则会记录一条警告信息。

如果在 start.spring.io 上启动 Kotlin 项目,默认情况下会提供这些依赖项和插件。

空安全

Kotlin 的关键特性之一是空安全性。它能在编译时处理空值,而不是将问题推迟到运行时再处理,这样就会遇到 NullPointerException(空指针异常)。这有助于消除常见的 bug 源头,而无需像 Optional 这样的封装器的成本。Kotlin 还允许使用带有可空值的函数式构造,如本《Kotlin 空安全综合指南》所述。

虽然 Java 不允许在其类型系统中表达空安全性,但 Spring Framework、Spring Data 和 Reactor 现在通过工具友好注解为其 API 提供了空安全性。默认情况下,Kotlin 中使用的 Java API 中的类型会被识别为平台类型,对其放宽空检查。Kotlin 对 JSR 305 注释的支持与 nullability 注释相结合,为 Kotlin 中的相关 Spring API 提供了空安全性。

JSR 305 检查可通过添加带有以下选项的 -Xjsr305 编译器标记来配置: -Xjsr305={strict|warn|ignore}。默认行为与 -Xjsr305=warn 相同。使用strict值时,从 Spring API 推断的 Kotlin 类型必须考虑空安全性,但在使用时应注意 Spring API 空性声明即使在小版本之间也会发生变化,未来可能会添加更多检查)。

尚未支持通用类型参数、变量和数组元素的无效性。有关最新信息,请参见 SPR-15942。另外请注意,Spring Boot 自身的 API 尚未注释

Kotlin API

runApplication

Spring Boot 提供了运行应用程序的惯用方式,即 runApplication<MyApplication>(*args),如下例所示:

kotlin 复制代码
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)。它还允许自定义应用程序,如下例所示:

kotlin 复制代码
runApplication<MyApplication>(*args) {
    setBannerMode(OFF)
}

扩展

Kotlin extensions提供了用附加功能扩展现有类的能力。Spring Boot Kotlin API 可利用这些扩展为现有 API 添加新的 Kotlin 特定便利功能。

我们提供了 TestRestTemplate 扩展,它与 Spring Framework 为 Spring Framework 中的 RestOperations 提供的扩展类似。除其他外,这些扩展还能利用 Kotlin 重定义的类型参数。

依赖管理

为了避免在类路径上混合不同版本的 Kotlin 依赖,Spring Boot 会导入 Kotlin BOM。

使用 Maven 时,可通过设置 kotlin.version 属性自定义 Kotlin 版本,并为 kotlin-maven-plugin 提供插件管理。使用 Gradle 时,Spring Boot 插件会自动将 kotlin.version 与 Kotlin 插件的版本保持一致。

Spring Boot 还通过导入 Kotlin Coroutines BOM 来管理 Coroutines 依赖项的版本。可通过设置 kotlin-coroutines.version 属性自定义版本。

org.jetbrains.kotlinx:kotlinx-coroutines-reactor 依赖关系是默认提供的,前提是 Kotlin 项目在启动时至少有一个对 start.spring.io 的反应式依赖关系。

@ConfigurationProperties

@ConfigurationProperties 与构造函数绑定结合使用时,可支持具有不可变值属性的类,如下例所示:

kotlin 复制代码
@ConfigurationProperties("example.kotlin")
data class KotlinExampleProperties(
        val name: String,
        val description: String,
        val myService: MyService) {

    data class MyService(
            val apiToken: String,
            val uri: URI
    )
}

要使用注释处理器生成自己的元数据,应使用 spring-boot-configuration-processor 依赖关系配置 kapt。请注意,由于 kapt 提供的模型存在局限性,某些功能(如检测默认值或废弃项)无法正常工作。

测试

虽然可以使用 JUnit 4 测试 Kotlin 代码,但默认提供并推荐使用 JUnit 5。JUnit 5能让测试类实例化一次,并在类的所有测试中重复使用。这使得在非静态方法上使用 @BeforeAll@AfterAll 注解成为可能,这非常适合 Kotlin。

要模拟 Kotlin 类,建议使用 MockK。如果你需要与 Mockito 特有的 @MockBean@SpyBean 注解等价的 MockK,可以使用 SpringMockK,它提供了类似的 @MockkBean@SpykBean 注解。

资料

更多阅读

示例

相关推荐
利刃大大5 小时前
【SpringBoot】Spring事务 && @Transactional详解 && Spring事务失效问题
spring boot·spring·事务
..过云雨6 小时前
17-2.【Linux系统编程】线程同步详解 - 条件变量的理解及应用
linux·c++·人工智能·后端
南山乐只7 小时前
【Spring AI 开发指南】ChatClient 基础、原理与实战案例
人工智能·后端·spring ai
㳺三才人子7 小时前
初探 Spring Framework OncePerRequestFilter
spring boot·spring·junit
这是程序猿8 小时前
基于java的ssm框架学生作业管理系统
java·开发语言·spring boot·spring·学生作业管理系统
努力的小雨8 小时前
从“Agent 元年”到 AI IDE 元年——2025 我与 Vibe Coding 的那些事儿
后端·程序员
zh_xuan8 小时前
kotlin定义函数和变量
android·开发语言·kotlin
源码获取_wx:Fegn08958 小时前
基于springboot + vue小区人脸识别门禁系统
java·开发语言·vue.js·spring boot·后端·spring
wuxuanok9 小时前
Go——Swagger API文档访问500
开发语言·后端·golang
用户21411832636029 小时前
白嫖Google Antigravity!Claude Opus 4.5免费用,告别token焦虑
后端