如何使用"功能bean定义Kotlin DSL"使用Spring Boot和Spring WebFlux?

时间:2017-08-29 09:51:49

标签: spring spring-boot kotlin spring-webflux

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 一起使用都会受到赞赏。

3 个答案:

答案 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
                }
        )
    }
}