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

在https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt ,注释显示了如何定义Spring Beans通过新的“功能bean定义Kotlin DSL”。 我也发现https://github.com/sdeleuze/spring-kotlin-functional 。 但是,这个例子使用的只是普通的 Spring而不是Spring Boot 。 任何提示如何与Spring Boot一起使用DSL是值得赞赏的。

Spring Boot基于Java Config,但应该允许通过ApplicationContextInitializer支持对用户定义的函数bean声明DSL进行实验性支持,如此处所述。

在实践中,你应该能够在包含beans()函数的Beans.kt文件中声明你的bean。

 fun beans() = beans { // Define your bean with Kotlin DSL here } 

然后,为了在运行main()和测试时通过Boot进行考虑,请创建一个ApplicationContextInitializer类,如下所示:

 class BeansInitializer : ApplicationContextInitializer<GenericApplicationContext> { override fun initialize(context: GenericApplicationContext) = beans().initialize(context) } 

最终,在你的application.properties文件中声明这个初始化器:

 context.initializer.classes=com.example.BeansInitializer 

你会在这里找到一个完整的例子,也可以关注这个关于专用Spring注册的Spring Boot支持的问题 。