Spring Boot 对 Kotlin的支持

本文介绍了SpringBoot3.2.0如何支持Kotlin编程,包括版本要求、库管理、空值安全特性、运行应用习惯用法、KotlinAPI扩展、依赖管理和测试框架的选择。
摘要由CSDN通过智能技术生成

https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#features.kotlin

Kotlin 是一种面向 JVM(以及它他平台)的静态类型语言,它允许编写简洁而优雅的代码,同时提供与用 Java 编写的现有库的互操作性。

Spring Boot 通过利用 Spring Framework、Spring Data 和 Reactor 等它他 Spring 项目中的支持来提供对 Kotlin 的支持。

要求

Spring Boot 要求至少使用 Kotlin 1.7.x,并通过依赖管理来管理合适的 Kotlin 版本。要使用 Kotlin,必须将 org.jetbrains.kotlin:kotlin-stdliborg.jetbrains.kotlin:kotlin-reflect 添加到类路径中。也可以使用 kotlin-stdlib 的变体 kotlin-stdlib-jdk7kotlin-stdlib-jdk8

由于 Kotlin 类默认是 final 的,你可能希望配置 kotlin-spring 插件,以便自动打开带有 Spring 注解的类,以便它们可以被代理。

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

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

空值安全(Null-safety)

Kotlin 的一个关键特性是空值安全(null-safety)。它在编译时处理空值,而不是将问题推迟到运行时并遇到 NullPointerException。这有助于消除常见的错误来源,而无需支付像 Optional 这样的包装器的成本。此外,Kotlin 还允许使用带空值的函数式构造。

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

JSR 305 检查可以通过添加以下选项的 -Xjsr305 编译器标志来配置:-Xjsr305={strict|warn|ignore}。默认行为与 -Xjsr305=warn 相同。strict 值要求 Kotlin 从 Spring API 推断的类型中考虑空值安全,但应知道 Spring API 的空值性声明即使在次要版本之间也可能有所发展,并且将来可能会添加更多检查。

注意:泛型类型参数、varargs 和数组元素的空值性尚不支持。

Kotlin API

runApplication

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)
}

扩展(Extensions)

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

提供了与 Spring Framework 中为 RestOperations 提供的扩展类似的 TestRestTemplate 扩展。除此之外,这些扩展还使得可以利用 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 属性来自定义版本。

提示:如果在 start.spring.io 上使用至少一个响应式依赖项引导 Kotlin 项目,那么会默认提供 org.jetbrains.kotlinx:kotlinx-coroutines-reactor 依赖项。

@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
    )
}

提示:要使用注解处理器生成自己的元数据,应将 kapt 配置为具有 spring-boot-configuration-processor 依赖项。请注意,由于 kapt 提供的模型存在限制,某些功能(如检测默认值或已弃用的项)可能无法正常工作。

测试(Testing)

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

要模拟 Kotlin 类,建议使用 MockK。如果需要 MockKMockito 特定的 @MockBean@SpyBean 注解的等效项,可以使用 SpringMockK,它提供了类似的 @MockkBean@SpykBean 注解。

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值