Spring Boot 通过利用其他 Spring 项目(如 Spring Framework、Spring Data 和 Reactor)的支持来提供 Kotlin 支持。有关更多信息,请参阅 。
开始学习 Spring Boot 和 Kotlin 最简单方法是遵循这个全面教程。您可以通过 创建新的 Kotlin 项目。如果您需要支持,请免费加入 Kotlin Slack 的 #spring 频道或使用 上的 spring
和 kotlin
标签提问。
Spring Boot 支持 Kotlin 1.2.x。要使用 Kotlin,classpath 下必须存在 org.jetbrains.kotlin:kotlin-stdlib
和 org.jetbrains.kotlin:kotlin-reflect
。也可以使用 kotlin-stdlib
的变体 kotlin-stdlib-jdk7
和 kotlin-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、进阶阅读
- Kotlin 语言参考
- (有专用的 #spring 频道)
- Stackoverflow 上 和
kotlin
标签 - Awesome Kotlin
- 使用 Kotlin 开发 Spring Boot 应用程序
- 在 Spring Framework 5.0 中引入 Kotlin 支持
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