https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt theコメントは、新しい「Functional Bean定義Kotlin DSL」を介してSpring Beanを定義する方法を示しています。私も https://github.com/sdeleuze/spring-kotlin-functional を見つけました。ただし、この例では、SpringBootではなく、plainSpringのみを使用しています。 SpringBootと一緒にDSLを使用する方法のヒントはありがたいです。
Spring BootはJava Configに基づいていますが、ユーザー定義の実験的なサポートを許可する必要があります Functional Bean宣言DSLApplicationContextInitializer
サポートを介して ここ 。
実際には、たとえば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
_
完全な例 ここ があり、機能的なBean登録のための専用のSpring Bootサポートについて この問題 に従うこともできます。
Spring Bootでそれを行う別の方法は次のようになります:
fun main(args: Array<String>){
SpringApplicationBuilder().initializers( beans {
// Define your bean with Kotlin DSL here
}).sources(MainClass::class.Java).run(*args);