web-dev-qa-db-ja.com

Spring Beanを再初期化する方法は?

実行時にSpring Beanを再初期化することは可能ですか?

私のBeanは静的な設定を使用しますが、これは場合によっては変更されるため、Beanを再初期化する必要があります。

8
Fip

SpringコンテキストでシングルトンBeanを更新するための3つのオプションがあります。ユースケースに適したものを選択できます。

Beanのリロードメソッド
プロパティを更新/再ロードするメソッドをBeanに作成します。トリガーに基づいて、SpringコンテキストからBeanにアクセスしてから、reloadメソッドを呼び出してBeanプロパティを更新します(シングルトン以降)。Springコンテキストおよび自動配線/注入されるすべての場所でも更新されます。

レジストリにBeanを削除して登録する
DefaultSingletonBeanRegistryを使用して、Beanを削除および再登録できます。これの唯一の欠点は、コンシューマークラスで既に自動配線/挿入されたBeanの古いインスタンスを更新/再ロードしないことです。

DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache

@ RefreshScope
設定変更からBean値プロパティを更新するのに便利です。しかし、それは非常に限定された特定の目的を持っています。 リソース 詳細については、こちらをご覧ください。

8
Amith Kumar

Spring Cloud依存関係をアプリケーションに追加し、アノテーション@ConfigurationPropertiesおよび@RefreshScopeでBeanをマークできます。その後、エンドポイント/ refreshを呼び出すと、Beanの@Valueプロパティが再初期化されます。

0
Igor Bljahhin