你多少年没用 Spring 了?
Spring 5.0(2017 年) 开始, 除了 Reactive,Kotlin 就是最重要的特性之一,Spring 对 Kotlin 进行深度集成(远超过之差的 Groovy 语言支持)。针对很多 Kotlin 特性很多优化,例如,不必声明 open, data class 可以用于 JPA Entity 等。
Kotlin DSL 声明 beans 定义,安全 (参考 Spring 中 BeanDefinitionDSL )等。
val beans = beans {
bean {
CommandLineRunner {
println("start data initialization...")
val posts = ref<PostRepository>()
posts.deleteAll()
.thenMany<Post>(
posts.saveAll(
arrayListOf(
Post(null, "my first post", "content of my first post"),
Post(null, "my second post", "content of my second post")
)
)
)
.log()
.subscribe(
{ println(it) },
{ println(it) },
{ println("data initialization done...") }
)
}
}
https://github.com/hantsy/spring-kotlin-dsl-sample/blob/master/reactive/src/main/kotlin/com/example/demo/DemoApplication.kt现在 Spring 还有一个 Spring Kofu 孵化项目(提供完全 Kotlin DSL )。
val app = reactiveWebApplication {
configurationProperties<SampleProperties>(prefix = "sample")
enable(dataConfig)
enable(webConfig)
listener<ApplicationReadyEvent> {
println("start data initialization...")
ref<PostRepository>().init()
}
profile("foo") {
beans { bean<Bar>() }
}
}
https://github.com/hantsy/spring-kotlin-dsl-sample/blob/master/kofu-reactive-mongo/src/main/kotlin/com/example/demo/DemoApplication.kt