天天看点

飞5的Spring Boot2(42)- 整合Kotlin

Kotlin的支持

飞5的Spring Boot2(42)- 整合Kotlin

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

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

从Spring Boot和Kotlin开始的最简单的方法是通过start.spring.io创建一个项目 。如果您需要支持,请随时加入Kotlin Slack的#spring频道,或者在Stack Overflow上提问spring 并提供kotlin标签。

要求

Spring Boot支持Kotlin 1.2.x. 要使用Kotlin,org.jetbrains.kotlin:kotlin-stdlib并且 org.jetbrains.kotlin:kotlin-reflect必须存在于类路径中。该kotlin-stdlib变种kotlin-stdlib-jdk7和kotlin-stdlib-jdk8也可以使用。

由于Kotlin类默认是最终的,因此您可能希望配置 kotlin-spring 插件以自动打开Spring注释的类,以便它们可以被代理。

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

注意

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

无安全

Kotlin的主要特点之一是无效安全。它null在编译时处理值,而不是将问题推迟到运行时并遇到一个NullPointerException。这有助于消除常见的错误来源,而无需支付类似包装的费用Optional。Kotlin还允许使用此综合指南中描述的具有可为空值的功能性结构以 在Kotlin中实现无效安全。

虽然Java不允许在类型系统中表示空安全性,但Spring Framework,Spring Data和Reactor现在通过易于使用工具的注释提供了API的无安全性。默认情况下,Kotlin中使用的Java API类型被认为 是放宽null检查的平台类型。 Kotlin对JSR 305注释和可空性注释的支持为Kotlin中的相关Spring API提供了无效安全性。

可以通过添加-Xjsr305带有以下选项的编译器标志来配置JSR 305检查:-Xjsr305={strict|warn|ignore}。默认行为与-Xjsr305=warn。相同 。该strict值必须在考虑采取从春季API推断科特林类型的空安全,但应与知识使用的春天API可空声明甚至次要版本和更多的检查可能会在将来添加)之间的进化。

警告:通用类型参数,可变参数和数组元素可空性尚不支持。有关最新信息,请参阅SPR-15942。另外请注意,Spring Boot自己的API 尚未注释。

Kotlin API

runApplication

Spring Boot提供了一种惯用的方式来运行应用程序, runApplication(*args)如以下示例所示:

1import org.springframework.boot.autoconfigure.SpringBootApplication
2import org.springframework.boot.runApplication
3@SpringBootApplication
4class MyApplication
5fun main(args: Array<String>) {
6runApplication<MyApplication>(*args)
7}      

这是一个直接替换 SpringApplication.run(MyApplication::class.java, *args)。它还允许定制应用程序,如以下示例所示:

1runApplication <MyApplication>(* args){
2setBannerMode(OFF)
3}      

扩展

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

TestRestTemplate提供了类似于Spring框架为RestOperationsSpring框架提供的扩展 。除此之外,这些扩展可以充分利用Kotlin的通用类型参数。

依赖管理

为了避免在类路径中混合使用不同版本的Kotlin依赖关系,提供了以下Kotlin依赖关系的依赖关系管理:

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

通过Maven,Kotlin版本可以通过kotlin.version属性进行定制,并提供插件管理kotlin-maven-plugin。使用Gradle时,Spring Boot插件会自动将kotlin.versionKotlin插件的版本对齐。

@ConfigurationProperties

@ConfigurationProperties目前只适用于lateinit可空var 属性(前者是推荐的),因为由构造函数初始化的不可变类尚不受支持。

1@ConfigurationProperties( “example.kotlin”)
 2class KotlinExampleProperties {
 3lateinit var name:String
 4lateinit var description: String
 5val myService = MyService()
 6class MyService {
 7lateinit var apiToken:String
 8lateinit var uri:URI
 9}
10}      

测试