Как использовать «Функциональное определение компонента Kotlin DSL» с Spring Boot и Spring WebFlux?

В https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt комментарий показывает, как определить Spring Beans через новое «Функциональное определение компонента Kotlin DSL». Я также нашел https://github.com/sdeleuze/spring-kotlin-functional . Однако в этом примере используется просто Spring, а не Spring Boot . Любой намек на использование DSL вместе с Spring Boot оценивается.

Spring Boot основан на Java Config, но должен позволить экспериментальную поддержку определяемого пользователем описания функционального компонента DSL через поддержку ApplicationContextInitializer как описано здесь .

На практике вы должны иметь возможность объявлять свои компоненты, например, в файле Beans.kt содержащем функцию 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 :

 context.initializer.classes=com.example.BeansInitializer 

Здесь вы найдете полный пример и можете также следить за этой проблемой о поддержке Spring Boot для регистрации функциональных компонентов.