在https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt,评论显示如何通过新的"功能bean定义Kotlin DSL"来定义Spring Beans。我还找到了https://github.com/sdeleuze/spring-kotlin-functional。但是,此示例仅使用 plain Spring而不是Spring Boot 。任何提示如何将DSL与Spring Boot 一起使用都会受到赞赏。
答案 0 :(得分:14)
Spring Boot基于Java Config,但应该允许通过functional bean declaration DSL支持用户定义的here,如here所述。
实际上,您应该能够在包含ApplicationContextInitializer
函数的Beans.kt
文件中声明您的bean。
beans()
然后,为了在运行fun beans() = beans {
// Define your bean with Kotlin DSL here
}
并测试时通过Boot考虑它,请创建一个main()
类,如下所示:
ApplicationContextInitializer
最后,在class BeansInitializer : ApplicationContextInitializer<GenericApplicationContext> {
override fun initialize(context: GenericApplicationContext) =
beans().initialize(context)
}
文件中声明此初始值设定项:
application.properties
您将找到一个完整的示例this issue,并且还可以关注{{3}}关于功能bean注册的专用Spring Boot支持。
答案 1 :(得分:2)
您可以在* Config.kt文件中定义bean,并实现 ApplicationContextInitializer 接口的initalize方法。
override fun initialize(applicationContext: GenericApplicationContext) {
....
}
这里有一些bean定义。
bean<XServiceImpl>("xService")
bean("beanName") {
BeanConstructor(ref("refBeanName"))
}
答案 2 :(得分:1)
在Spring Boot中执行此操作的另一种方法是:
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args) {
addInitializers(
beans {
// Define your bean with Kotlin DSL here
}
)
}
}