BeanFactoryとApplicationContextの違い(Beanファクトリとアプリケーションコンテキスト)



Difference Between Beanfactory



BeanFactoryおよびApplicationContextインターフェースとそれらのサブクラス図

applicationcontext beanfactory



BeanFactory

BeanFactoryは、Springの元のインターフェースです。元の構造の実装機能は比較的単純です。 BeanFactoryインターフェースによって実装されるコンテナーは、オブジェクトが取得されるたびにオブジェクトが作成されるという特徴があります。

ApplicationContext

BeanFactoryインターフェースを継承し、BeanFactoryのすべての機能を備え、多くの高度な機能を拡張して、コンテナーが起動するたびにすべてのオブジェクトを作成します。



ApplicationContextメソッドを作成します。

  1. プレックスクラスパスの下に構成ファイルをロードします:ClassPathXmlApplicationContext( 'applicationContext.xml')
  2. ハードディスクの絶対パスから構成ファイルをロードします:FileSystemXmlApplicationContext( 'd:/ xxx / yyy / xxx')

結論として

初期のコンピュータのパフォーマンスは低く、メモリが小さいため、Springコンテナの容量が十分ではないため、すべてのオブジェクトがコンテナに作成されているとは言えません。したがって、オブジェクトが必要なときにBeanFactoryを使用して、作成します。コンピュータハードウェアの開発に伴い、メモリはますます大きくなっているため、Spring FrameworkはApplicationContextを導入します。これにより、すべてのオブジェクトが作成され、コンテナに配置され、どのオブジェクトを使用してコンテナから取得されます。

したがって、Web開発では、applicationContextを使用します。 BeanFactoryは、リソースの少ない環境で使用できます。



BeanFactoryとApplicationContext (詳細な説明)

  • 豆工場 (com.springframework.beans.factory.BeanFactory)は、Springフレームワークのコアインターフェイスであり、高度なIoC構成メカニズムを提供します。
  • アプリケーションコンテキスト (com.springframework.context.ApplicationContext)はBeanFactoryに基づいています。

ほとんどすべてのアプリケーションで、基盤となるBeanFactoryの代わりにApplicationContextを直接使用します。

1.1BeanFactoryクラスのアーキテクチャ

BeanFactory: インターフェイスは、クラス構造ツリーの最上位にあります。そのメインメソッドはgetBean(StringbeanName)で、コンテナから特定の名前のBeanを返します。 BeanFactoryの機能は、他のインターフェースによって拡張されています。
ListableBeanFactory :このインターフェースは、Beanの数の表示、Beanのタイプの構成名の取得、Beanがコンテナーに含まれているかどうかの確認など、コンテナー内のBeanの基本情報にアクセスするためのいくつかのメソッドを定義します。
HierarchicalBeanFactory: 親と子はIoCコンテナのインターフェイスをカスケードし、子コンテナはインターフェイスメソッドを介して親コンテナにアクセスできます
ConfigurableBeanFactory :は、セットアップクラスローダー、プロパティエディター、およびコンテナーの初期化を定義するIoCコンテナーのカスタマイズ性を強化する重要なインターフェイスです。 ポストプロセッサなどの方法
AutowireCapableBeanFactory:
特定のルール(名前による照合、タイプによる照合など)に従ってコンテナー内のBeanを自動的に組み立てる方法を定義します。
SingletonBeanRegistry: 実行時に単一インスタンスBeanをコンテナに登録できるようにするメソッドを定義します
BeanDefinitionRegistry: Spring構成ファイルの各ノード要素は、Beanの構成情報を記述するBeanDefinitionオブジェクトによってSpringコンテナーで表されます。 BeanDefinitionRegistryインターフェースは、BeanDefinitionオブジェクトをコンテナーに手動で登録する方法を提供します。

1.2 ApplicationContext クラスアーキテクチャ

ApplicationContext BeanFactoryから派生し、実際のアプリケーションにより多くの機能を提供します。 BeanFactoryでは、多くの関数をプログラムで実装する必要がありますが、ApplicationContextでは、構成によって実装できます。
ApplicationContextの主な実装クラスは、ClassPathXmlApplicationContextとFileSystemXmlApplicationContextです。前者はデフォルトでクラスパスから構成ファイルをロードし、後者はデフォルトでファイルシステムから構成ファイルをロードします。

コアインターフェイスには次のものが含まれます。
ApplicationEventPublisher: コンテナに、コンテナの起動イベント、シャットダウンイベントなど、アプリケーションコンテキストイベントを公開する機能を持たせます。 ApplicationListenerイベントリスナーインターフェイスを実装するBeanは、コンテナイベントを受信し、イベントに応答できます。 ApplicationContext抽象実装クラスAbstractApplicationContextには、コンテナがコンテキストイベントを生成したときにイベントリスナーに通知するためにすべてのリスナーを保存する役割を担うApplicationEventMulticasterがあることがわかります。
メッセージソース: アプリケーションにi18nの国際化されたメッセージアクセスを提供する
ResourcePatternResolver: すべてのApplicationContext実装クラスは、PathMatchingResourcePatternResolverと同様の関数を実装しており、Antスタイルのリソースファイルパスがプレフィックスとして付いたSpringの構成ファイルをロードできます。
ライフサイクル: このインターフェイスはSpring2.0によって追加されました。これは、主に非同期処理を制御するために使用される2つのメソッドstart()とstop()を提供します。特定の用途では、インターフェースはApplicationContextと具象Beanによって実装されます。 ApplicationContextは、JMXとタスクのスケジューリングの管理と制御を実現するために、インターフェースを実装するコンテナー内のすべてのBeanに開始/停止情報を渡します。
ConfigurableApplicationContext ApplicationContextに拡張して、2つの主要なメソッドrefresh()とclose()を追加します。これにより、ApplicationContextは、アプリケーションコンテキストを開始、更新、および閉じることができます。アプリケーションコンテキストをオフにしてrefresh()を呼び出すと、アプリケーションコンテキストが開始されます。すでに開始されている状態では、refresh()を呼び出すとキャッシュがクリアされ、構成情報が再ロードされ、close()を呼び出すとアプリケーションコンテキストが閉じられます。これらのインターフェースメソッドは、コンテナーの制御と管理に便利さをもたらします。

コード例:

ApplicationContext ctx =new ClassPathXmlApplicationContext('com/baobaotao/context/beans.xml') ApplicationContext ctx =new FileSystemXmlApplicationContext('com/baobaotao/context/beans.xml') ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{'conf/beans1.xml','conf/beans2.xml'})

ApplicationContextとBeanFactoryの初期化には大きな違いがあります。BeanFactoryがコンテナを初期化するとき、Beanは最初にアクセスされるまでインスタンス化されず、ApplicationContextはアプリケーションコンテキストが初期化されるときにリストをインスタンス化します。インスタンスのBean。