Kotlin 支援
Spring Boot 透過利用 Spring Framework、Spring Data 和 Reactor 等其他 Spring 專案中的支援來提供 Kotlin 支援。有關更多資訊,請參閱 Spring Framework Kotlin 支援文件。
開始使用 Spring Boot 和 Kotlin 最簡單的方法是遵循此綜合教程。您可以使用 start.spring.io 建立新的 Kotlin 專案。如果您需要支援,可以隨意加入 Kotlin Slack 的 #spring 頻道或在 Stack Overflow 上使用 spring 和 kotlin 標籤提問。
要求
Spring Boot 至少需要 Kotlin 2.2.x,並透過依賴管理管理合適的 Kotlin 版本。要使用 Kotlin,org.jetbrains.kotlin:kotlin-stdlib 和 org.jetbrains.kotlin:kotlin-reflect 必須在類路徑中。
Kotlin 2.2.x 引入了將註解傳播到引數、欄位和屬性的新預設規則。為了避免相關警告並使用未來版本中可能成為 Kotlin 預設行為的內容,建議配置 -Xannotation-default-target=param-property 編譯器標誌。
由於Kotlin 類預設是 final 的,您可能希望配置 kotlin-spring 外掛,以便自動開啟 Spring 註解的類,以便它們可以被代理。
在 Kotlin 中序列化/反序列化 JSON 資料需要 Jackson 的 Kotlin 模組。當在類路徑中找到它時,它會自動註冊。如果 Jackson 和 Kotlin 存在但 Jackson Kotlin 模組不存在,則會記錄一條警告訊息。
| 如果在 start.spring.io 上啟動 Kotlin 專案,預設會提供這些依賴項和外掛。 |
空安全
Kotlin 的主要特性之一是空安全。它在編譯時處理 null 值,而不是將問題推遲到執行時並遇到 NullPointerException。這有助於消除常見的 bug 源,而無需付出 Optional 等包裝器的代價。Kotlin 還允許將函式式構造與可空值一起使用,如 Kotlin 空安全綜合指南中所述。
從 Kotlin 2.1 開始,Kotlin 強制嚴格處理 org.jspecify.annotations 包中的可空性註解。
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)
}
擴充套件
Kotlin 擴充套件提供了使用附加功能擴充套件現有類的能力。Spring Boot Kotlin API 利用這些擴充套件為現有 API 新增新的 Kotlin 特定便利。
提供了 TestRestTemplate 擴充套件,類似於 Spring Framework 為 Spring Framework 中的 RestOperations 提供的擴充套件。除其他外,這些擴充套件使得利用 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
)
}
由於值類與 Java 互操作性的限制,對值類的支援是有限的。特別是,依賴值類的預設值將不適用於配置屬性繫結。在這種情況下,應改用資料類。
測試
雖然可以使用 JUnit 4 測試 Kotlin 程式碼,但預設提供並推薦使用 JUnit 6。JUnit 6 允許測試類只例項化一次並重複用於該類的所有測試。這使得在非靜態方法上使用 @BeforeAll 和 @AfterAll 註解成為可能,這非常適合 Kotlin。
為了模擬 Kotlin 類,推薦使用 MockK。如果您需要 Mockito 特定的 @MockitoBean 和 @MockitoSpyBean 註解的 MockK 等價物,可以使用 SpringMockK,它提供了類似的 @MockkBean 和 @SpykBean 註解。
資源
示例
-
spring-boot-kotlin-demo:常規 Spring Boot + Spring Data JPA 專案
-
mixit:Spring Boot 2 + WebFlux + 響應式 Spring Data MongoDB
-
spring-kotlin-fullstack:WebFlux Kotlin 全棧示例,前端使用 Kotlin2js 而不是 JavaScript 或 TypeScript
-
spring-petclinic-kotlin:Spring PetClinic 示例應用程式的 Kotlin 版本
-
spring-kotlin-deepdive:從 Boot 1.0 + Java 到 Boot 2.0 + Kotlin 的逐步遷移
-
spring-boot-coroutines-demo:協程示例專案