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

    开始学习 Spring Boot 和 Kotlin 最简单方法是遵循这个全面教程。您可以通过 创建新的 Kotlin 项目。如果您需要支持,请免费加入 Kotlin Slack 的 #spring 频道或使用 上的 springkotlin 标签提问。

    Spring Boot 支持 Kotlin 1.2.x。要使用 Kotlin,classpath 下必须存在 org.jetbrains.kotlin:kotlin-stdliborg.jetbrains.kotlin:kotlin-reflect。也可以使用 kotlin-stdlib 的变体 kotlin-stdlib-jdk7kotlin-stdlib-jdk8

    由于 ,因此您可能需要配置 kotlin-spring 插件以自动打开 Spring-annotated 类,以便可以代理它们。

    在 Kotlin 中序列化/反序列化 JSON 数据需要使用 。在 classpath 中找到它时会自动注册。如果 Jackson 和 Kotlin 存在但 Jackson Kotlin 模块不存在,则会记录警告消息。

    提示

    50.2、Null 安全

    Kotlin 的一个关键特性是 null 安全。它在编译时处理空值,而不是将问题推迟到运行时并遇到 NullPointerException。这有助于消除常见的错误来源,而无需支付像 Optional 这样的包装器的成本。Kotlin 还允许使用有可空值的,如 中所述。

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

    警告

    50.3.1、runApplication

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

    这是 SpringApplication.run(MyApplication::class.java, *args) 的替代方式。它还允许自定义应用程序,如下所示:

    50.3.2、扩展

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

    提供的 TestRestTemplate 扩展类似于 Spring Framework 为 RestOperations 提供的。除此之外,扩展使得利用 Kotlin reified 类型参数变为可能。

    50.4、依赖管理

    为了避免在 classpath 上混合不同版本的 Kotlin 依赖项,提供了以下 Kotlin 依赖项的依赖项管理:

    • kotlin-reflect
    • kotlin-runtime
    • kotlin-stdlib
    • kotlin-stdlib-jdk7
    • kotlin-stdlib-jdk8
    • kotlin-stdlib-jre7
    • kotlin-stdlib-jre8

    @ConfigurationProperties 目前仅适用于 lateinit 或可空的 var 属性(建议使用前者),因为由构造函数初始化的不可变类。

    提示

    50.6、测试

    虽然可以使用 JUnit 4(spring-boot-starter-test 提供的默认配置)来测试 Kotlin 代码,但建议使用 JUnit 5。JUnit 5 允许测试类实例化一次,并在所有类的测试中复用。这使得可以在非静态方法上使用 @BeforeAll@AfterAll 注解,这非常适合 Kotlin。

    要使用 JUnit 5,请从 spring-boot-starter-test 中排除 junit:junit 依赖项,然后添加 JUnit 5 依赖项,并相应地配置 Maven 或 Gradle 插件。有关更多详细信息,请参阅 JUnit 5 文档。您还需要。

    为了模拟 Kotlin 类,建议使用 Mockk。如果需要 Mockk 等效的 Mockito 特定的 ,则可以使用 SpringMockK,它提供类似的 @MockkBean@SpykBean 注解。

    50.7.1、进阶阅读

    50.7.2、示例

    • spring-boot-kotlin-demo:常规的 Spring Boot + Spring Data JPA 项目
    • :Spring Boot 2 + WebFlux + Reactive Spring Data MongoDB
    • spring-kotlin-fullstack:WebFlux Kotlin 全栈示例,在前端使用 Kotlin2js 代替 JavaScript 和 TypeScript
    • :将Boot 1.0 + Java 逐步迁移到 Boot 2.0 + Kotlin