重複をマークする前に完全な質問をしてください。コメントでもっと議論することができますコンストラクタインジェクションを使用して他のビーンに条件付きビーンを配線する
ServiceAがServiceBに依存する次のコードがあります。そしてserviceB実装Beanは、条件付きで、私はいくつかのキーと地図でそれを注入する必要があるとして、私は、サービスA Beanを自動検出することはできません
class ServiceA{
ServiceB serviceB;
ServiceA(ServiceB serviceB){
this.serviceB = serviceB;
}
}
@Configuration
class AppConfig{
@Conditional("some_condition_based_on_property")
@Bean
ServiceB serviceB1(){
return new ServiceBImpl1();
}
@Conditional("some_condition_based_on_property")
@Bean
ServiceB serviceB2(){
return new ServiceBImpl2();
}
@Bean
ServiceA serviceA(){
//what should go here so that conditional bean is injected in ServiceA
}
}
を初期化されます。 私が見ることの1つのオプションは、建設注入を取り除き、serviceAにserviceB bean @autowiredを持たせることです。これは私の最後のオプションです。その他のオプションは?
編集:私は注射中にif-elseをしたくないです。豆はさまざまな場所で定義できるためです。私は何が正しいの構成クラス内結果ServiceB
をオートワイヤリングとServiceA
を作成するための参照にそれを再利用するからあなたを保持していない@Conditional
可能な複製http://stackoverflow.com/questions/19225115/how-to-do-conditional-auto-wiring-in-spring? – aksappy
あなたはhttp://stackoverflow.com/questions/19225115/how-to-do-conditional-auto-wiring-in-springを確認できます –
質問が更新されました。関連する質問は私の特定の問題を解決しません – sidgate