2016-11-01 6 views
3

私はSpringベースのアプリケーションに取り組んでおり、特定のBeanを他のBeanの前に構築したいという要件があります。SpringでBeanの構築順序を設定するにはどうすればよいですか?

SpringでBeanが構築される順序はどのように指定できますか?

明確にするために、特定のBeanのコンストラクタ+ポスト構造体を他のBeanのコンストラクタの前に実行します。

+0

なぜですか?このBeanを特別なものにするのは何ですか? –

+0

このBeanは、開始するために他のBeanによって必要とされるいくつかのシステム全体の構成を設定します。 – stikku

+1

Springは依存関係を初期化します。 –

答えて

4

あなたはdepends-onを探しています。指定されたBeanは、Beanの前にコンテナによって作成されることが保証されています。

@Bean 
@DependsOn({"firstBean", "secondBean"}) 
class MyBean {} 

また、XMLであれば指定することができます。

<bean id="myBean" class="MyBean" depends-on="firstBean, secondBean"> 
</bean> 
+0

私はこれについて考えましたが、私たちのシナリオでは、コードを維持するだけで、すべてのBeanを単一のBeanに依存させるのは妥当な解決策ではありません。残念ながら、アプリケーションはかなり大きく、常に成長しています。 – stikku

+0

@stikku - 特定のBeanを最初に構築したかったということについて、どのように問題を解決しましたか? – Noam

+0

@Noamは依存関係を使用する以外の解決策を見つけられませんでした。アプリケーションのロジックを少し変更しなければなりませんでした。 @Autowired(required = false)を使用しています プライベートリスト myobject;依存関係を強制するだけです。 – stikku

1

(あなたは豆そのもののコードをコントロールしている場合)、それは法に@PostConstructのアノテーションを活用するのに役立つかもしれません。

  • 次に、あなたがすべき、@PostContstruct

でマークされた方法でこの道を、あなたの豆依存設定のすべてを持って一緒に春のワイヤすべて

  • をしてみましょう、コンストラクタ
  • であなたの豆とらわれない初期化を実行します。 (少なくとも私はそれを見ていない)、Beanの初期化の順序を必要としません。すべてが作成され、注入され、Springのフレンドリーなライフサイクルで開始されます。

    FYIの場合、必要に応じてクリーンアップのために@PreDestroyもあります。

    ここの簡単な例:https://www.mkyong.com/spring/spring-postconstruct-and-predestroy-example/

  • +0

    これは動作しません。 (ちょうどこれを確かめるためにテストされている)2つの豆(AとB)がAを構築し、Aの@PostConstructを実行し、それがBを構築することを前提とすると、post構造の背後にある理由は、他の豆とは関係がありません。 – stikku

    +0

    @stikkuこれは当てはまりません。ドキュメントから:[PostConstruct](http://docs.oracle.com/javaee/7/api/javax/annotation/PostConstruct。html) 'PostConstructアノテーションは、依存性注入が行われた後に実行して初期化を実行する必要があるメソッドで使用されます。 ' –

    +0

    ステートメントは正しいですが、ポストコンストラクトは豆の効果順ではなく、この豆は、しかし、豆の建設の前に。したがって、この質問には関係ありません。 – stikku

    関連する問題