JVM 与 Spring
Java 互操作、Gradle、Spring Boot。
35 分钟
JVM 与 Spring
Kotlin 编译为 JVM 字节码,与 Java 无缝互操作。Spring Boot 官方支持 Kotlin,Gradle Kotlin DSL 是主流构建方式。
学习目标
- 理解 Kotlin 与 Java 的互操作规则
- 会用 Gradle Kotlin DSL 构建 Kotlin 项目
- 了解 Spring Boot + Kotlin 的基本结构
Java 互操作
// Kotlin 调用 Java
import java.util.ArrayList
fun main() {
val list = ArrayList<String>()
list.add("kotlin")
list.add("java")
println(list.size)
}
// Java 调用 Kotlin 需注意:
// - object / companion → 静态方法
// - 属性 → getter/setter
// - 默认参数 → @JvmOverloads
// - 可空 → @Nullable / @Nonnull
Kotlin 文件编译为 XXXKt 类;顶层函数成为静态方法。Java 侧用 @JvmStatic、@JvmField 控制生成代码。
Gradle Kotlin DSL
// build.gradle.kts
plugins {
kotlin("jvm") version "2.0.0"
id("org.springframework.boot") version "3.2.0"
kotlin("plugin.spring") version "2.0.0"
}
group = "com.example"
version = "1.0"
java {
toolchain { languageVersion.set(JavaLanguageVersion.of(17)) }
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
jackson-module-kotlin 支持 data class 序列化;kotlin("plugin.spring") 让类默认 open 以满足 Spring 代理需求。
Spring Boot 示例
// Application.kt
@SpringBootApplication
class Application
fun main(args: Array<String>) {
runApplication<Application>(*args)
}
// TrackController.kt
@RestController
@RequestMapping("/api/tracks")
class TrackController(private val service: TrackService) {
@GetMapping("/{slug}")
fun getTrack(@PathVariable slug: String): TrackDto? =
service.findBySlug(slug)
}
data class TrackDto(val slug: String, val title: String, val lessonCount: Int)
class TrackService {
fun findBySlug(slug: String): TrackDto? =
if (slug == "kotlin-essentials") TrackDto(slug, "Kotlin 语言入门", 12)
else null
}
runApplication 是 Spring 提供的 Kotlin 扩展;构造函数注入替代 @Autowired 字段注入。
与 Java 对照
| Kotlin + Spring | Java + Spring |
|---|---|