既に初期化されたBeanのリストを別のものに挿入する必要があります。初期化されたBeanのリストを挿入する
私は環境に応じて使用されるいくつかの怠惰な豆の定義を持つクラスを持っている - だけimpl1
とimpl2
が使用され、サーバー上のサーバー1上のような2 impl3
とimpl1
@Component
class Definitions {
@Bean
@Lazy
public A impl1() { /* ... */ }
@Bean
@Lazy
public A impl2() { /* ... */ }
@Bean
@Lazy
public A impl3() { /* ... */ }
}
そして、私はいくつかの監視を行っています環境について何を知っているだけで、アクチュエータのためのいくつかの健康情報を暴露するすべてのそれらのA
豆を収集していない豆:
@Component
class Monitoring implements HealthIndicator {
@Autowired
private List<A> monitored;
}
P汚れは、前もって初期化されていなくても、すべての豆がmonitored
に入っているスプリングワイヤーです(これは、すべてのものをクラッシュさせるため、適切な環境がないためです)。そして、私は何らかの形で春に、すでに初期化された豆だけが必要であることを説明する必要があります - @AutowireOnlyThoseLazyBeansWhichAlreadyBeenUsedSomewhereElse
P.S.私は汚れたハックを使用してDefinitions
のリストプロパティを宣言し、Beanのファクトリメソッドでそれを記入し、そのリストを参照する別のBeanを登録することができますが、それはあまりにも汚いです。
たぶん '@Autowired(required = false)'を使うことができますか? –
@RandallFlagg、それは貧しい環境でアプリケーション全体がクラッシュするようにBeanの賢明なインスタンス化を強制します。だから、期待通りに動作しないか、豆が即座にインスタンス化されないようにする必要があります。 – smt
プロファイルを使用し、異なるサーバーで適用するプロファイルを指定します。 –