2017-08-29 14 views
2

https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.ktにコメントは、新しい "機能的Bean定義Kotlin DSL"でSpring Beanを定義する方法を示しています。私はまたhttps://github.com/sdeleuze/spring-kotlin-functionalを見つけました。しかし、この例では、という単純な文字列を使用しています。のブートではなく、の春です。 DSLをSpringと一緒に使う方法についてのヒントブートが好評です。「Functional Bean Definition Kotlin DSL」をSpring BootとSpring WebFluxで使用するには?

+0

あなたは試してみましたか?このbean定義をコントローラ(これはスプリングブートによって発見されます)に入れます。 – guenhter

+1

はい、 'beans {...} 'の結果を返す' @ Bean'メソッドを使って '@ Configuration'クラスを試しました。それから、私は '@ Service'を削除し、上記の' '{...}'のラムダの中でサービスクラスを宣言すると例外が発生しました。 –

答えて

7

スプリングブートはJava Configに基づいていますが、hereのようにApplicationContextInitializerサポートを介してユーザ定義のfunctional bean declaration DSLを実験的にサポートする必要があります。

実際には、Beans.ktファイルにbeans()関数を含むBeanを宣言することができます。

class BeansInitializer : ApplicationContextInitializer<GenericApplicationContext> { 

    override fun initialize(context: GenericApplicationContext) = 
     beans().initialize(context) 

} 

そして最終的に、あなたのapplication.propertiesファイルで、この初期化子を宣言します:、main()とテストを実行するとき、それはブートによってアカウントで撮影した作り、次のようApplicationContextInitializerクラスを作成するために

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

context.initializer.classes=com.example.BeansInitializer 

完全な例はhereで、this issue機能的Bean登録のための専用Springブートサポートについて

+0

あなたの答えに関する2つの質問: *この初期化は、JUnitで 'SpringRunner'を使用してテストセットアップによって選択されます。 *この動作はテストで取り上げられる初期化を含め、 'properties'ファイルを作成しなくても可能ですか? ありがとう! –

関連する問題