私はSpringベースのアプリケーションに取り組んでおり、特定のBeanを他のBeanの前に構築したいという要件があります。SpringでBeanの構築順序を設定するにはどうすればよいですか?
SpringでBeanが構築される順序はどのように指定できますか?
明確にするために、特定のBeanのコンストラクタ+ポスト構造体を他のBeanのコンストラクタの前に実行します。
私はSpringベースのアプリケーションに取り組んでおり、特定のBeanを他のBeanの前に構築したいという要件があります。SpringでBeanの構築順序を設定するにはどうすればよいですか?
SpringでBeanが構築される順序はどのように指定できますか?
明確にするために、特定のBeanのコンストラクタ+ポスト構造体を他のBeanのコンストラクタの前に実行します。
あなたはdepends-onを探しています。指定されたBeanは、Beanの前にコンテナによって作成されることが保証されています。
@Bean
@DependsOn({"firstBean", "secondBean"})
class MyBean {}
また、XMLであれば指定することができます。
<bean id="myBean" class="MyBean" depends-on="firstBean, secondBean">
</bean>
私はこれについて考えましたが、私たちのシナリオでは、コードを維持するだけで、すべてのBeanを単一のBeanに依存させるのは妥当な解決策ではありません。残念ながら、アプリケーションはかなり大きく、常に成長しています。 – stikku
@stikku - 特定のBeanを最初に構築したかったということについて、どのように問題を解決しましたか? – Noam
@Noamは依存関係を使用する以外の解決策を見つけられませんでした。アプリケーションのロジックを少し変更しなければなりませんでした。 @Autowired(required = false)を使用しています プライベートリスト
(あなたは豆そのもののコードをコントロールしている場合)、それは法に@PostConstruct
のアノテーションを活用するのに役立つかもしれません。
@PostContstruct
でマークされた方法でこの道を、あなたの豆依存設定のすべてを持って一緒に春のワイヤすべて
FYIの場合、必要に応じてクリーンアップのために@PreDestroy
もあります。
ここの簡単な例:https://www.mkyong.com/spring/spring-postconstruct-and-predestroy-example/
これは動作しません。 (ちょうどこれを確かめるためにテストされている)2つの豆(AとB)がAを構築し、Aの@PostConstructを実行し、それがBを構築することを前提とすると、post構造の背後にある理由は、他の豆とは関係がありません。 – stikku
@stikkuこれは当てはまりません。ドキュメントから:[PostConstruct](http://docs.oracle.com/javaee/7/api/javax/annotation/PostConstruct。html) 'PostConstructアノテーションは、依存性注入が行われた後に実行して初期化を実行する必要があるメソッドで使用されます。 ' –
ステートメントは正しいですが、ポストコンストラクトは豆の効果順ではなく、この豆は、しかし、豆の建設の前に。したがって、この質問には関係ありません。 – stikku
なぜですか?このBeanを特別なものにするのは何ですか? –
このBeanは、開始するために他のBeanによって必要とされるいくつかのシステム全体の構成を設定します。 – stikku
Springは依存関係を初期化します。 –