天天看點

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

測試