23

私はこれらの 2 つの概念について少し混乱しています。Spring のドキュメントを読んで、たとえば次のようなことがわかりました。その Bean ファクトリは Spring コンテナです。また、「ApplicationContext は BeanFactory の完全なスーパーセットです」とも読みました。しかし、両者の違いはすぐにはわかりません。違いは何ですか?

4

3 に答える 3

29

Ajinkya によって添付されたこのリンクからの回答はかなり包括的ですが、別の資料からいくつかの良い点を参照したいと思います - Spring in Action (Manning Publications):

Spring ベースのアプリケーションでは、アプリケーション オブジェクトは Spring コンテナー内に存在します。図 2.1 に示すように、コンテナーはオブジェクトを作成し、それらを接続して構成し、ゆりかごから墓場 (場合によっては new から finalize()) までの完全なライフサイクルを管理します。

ここに画像の説明を入力

単一の Spring コンテナーはありません。Spring には、2 つの異なるタイプに分類できるいくつかのコンテナー実装が付属しています。Bean ファクトリー (org.springframework.beans.factory.BeanFactory インターフェースによって定義される) は、最も単純なコンテナーであり、DI の基本的なサポートを提供します。アプリケーション コンテキスト (org.springframework.context.ApplicationContext インターフェースによって定義される) は、プロパティ ファイルからのテキスト メッセージを解決する機能やアプリケーション イベントを関係者に公開する機能など、アプリケーション フレームワーク サービスを提供することにより、Bean ファクトリの概念に基づいて構築されます。イベントリスナー。

表面的には、ApplicationContext は BeanFactory とほとんど同じです。どちらも Bean 定義をロードし、Bean をまとめて接続し、要求に応じて Bean を分配します。しかし、ApplicationContext はさらに多くのことを提供します。

  • アプリケーション コンテキストは、メッセージの国際化 (I18N) のサポートを含む、テキスト メッセージを解決する手段を提供します。
  • アプリケーション コンテキストは、画像などのファイル リソースを読み込む一般的な方法を提供します。
  • アプリケーションコンテキストは、リスナーとして登録された Bean にイベントを発行できます。

追加機能が提供されるため、ApplicationContext はほぼすべてのアプリケーションで BeanFactory よりも優先されます。BeanFactory の使用を検討できるのは、モバイル デバイスなどのリソースが不足している状況のみです。

アプリケーション コンテキストによって提供される追加機能の他に、アプリケーション コンテキストと Bean ファクトリのもう 1 つの大きな違いは、シングルトン Bean のロード方法です。Bean ファクトリはすべての Bean を遅延ロードし、getBean() メソッドが呼び出されるまで Bean の作成を延期します。アプリケーションコンテキストは少し賢く、コンテキストの起動時にすべてのシングルトン Bean をプリロードします。シングルトン Bean をプリロードすることで、必要なときにすぐに使用できるようになります。アプリケーションは、それらが作成されるのを待つ必要がありません。

于 2012-04-25T03:39:06.567 に答える