2017-03-16 16 views
1

私は、自動スキャンと@Componentアノテーションを持つSpringプロジェクトを持っています。一部のコンポーネントは@Autowiredを使用して別のBeanに注入する必要があります。デフォルトでシングルトンとして作成されたのと同じコンポーネントBeanになりますか?もしそうなら、どうすれば同じコンポーネントの異なるインスタンスを別のBeanに注入できますか?Spring @Component @Autowired

P.S.私はそれが基本に近く、かなり一般的に聞こえることを知っています。ちょうどそれを自分のために明確にしたかった。あなたは多くのインスタンスがprototypeとしてそれを定義したい場合は、デフォルトでは、事前

+1

読むhttps://www.tutorialspoint.com/spring/spring_bean_scopes.htm – Jens

答えて

2

あなたはBean定義を作成するときに、あなたが定義したクラスの実際のインスタンスを作成するためのレシピを作成しますそのBean定義によって。 Bean定義がレシピであるという考え方は、クラスと同様に、単一のレシピから多数のオブジェクトインスタンスを作成できるという意味で重要です。

特定のBean定義から作成されたオブジェクトにプラグインされるさまざまな依存関係や構成値だけでなく、特定のBean定義から作成されたオブジェクトのスコープも制御できます。このアプローチは、Javaクラス・レベルのオブジェクトのスコープでベイク処理するのではなく、構成によって作成するオブジェクトの範囲を選択できるという点で、強力で柔軟性があります。 Beanはいくつかのスコープのうちの1つにデプロイするように定義することができます。つまり、Spring Frameworkは7つのスコープをサポートしています。そのうちの5つはWeb対応のApplicationContextを使用する場合にのみ使用できます。

以下のスコープがサポートされています。カスタムスコープを作成することもできます。

シングルトン (デフォルト)単一のBean定義をSpring IoCコンテナごとに1つのオブジェクトインスタンスにスコープします。

プロトタイプ 単一のBean定義を任意の数のオブジェクトインスタンスにスコープします。

リクエスト 単一のHTTP要求のライフサイクルに単一のBean定義を適用します。つまり、各HTTPリクエストには、単一のBean定義の背後に作成されたBeanの独自のインスタンスがあります。 Web対応Spring ApplicationContextのコンテキストでのみ有効です。

セッション 単一のBean定義をHTTPセッションのライフサイクルにスコープします。 Web対応Spring ApplicationContextのコンテキストでのみ有効です。

GlobalSession グローバルBean定義をグローバルHTTPセッションのライフサイクルに適用します。通常、ポートレット・コンテキストで使用する場合にのみ有効です。 Web対応Spring ApplicationContextのコンテキストでのみ有効です。

アプリケーション 単一のBean定義をServletContextのライフサイクルにスコープします。 Web対応Spring ApplicationContextのコンテキストでのみ有効です。

Websocket 単一のBean定義をWebSocketのライフサイクルにスコープします。 Web対応Spring ApplicationContextのコンテキストでのみ有効です。詳細については

ご覧ください:スコープのプロトタイプについてhttp://docs.spring.io/spring/docs/current/spring-framework-reference/html/

関連する問題