Spring IoCコンテナはSpring Frameworkの中核をなすものである。 このコンテナはオブジェクトを作成し、それらをつなぎ合わせ、設定し、作成から破棄までの完全なライフサイクルを管理する。
Spring は以下の2種類のコンテナを提供する。
- BeanFactory コンテナ
- ApplicationContext コンテナ
詳細はこちら。 Inversion of Control and Dependency Injection
BeanFactory
BeanFactory は本質的に、異なる Bean とその依存関係のレジストリを維持できる高度なファクトリのインタフェース以外の何ものでもありません。
BeanFactory により、Bean 定義を読み取り、Bean ファクトリを使用してそれらにアクセスすることができます。
1.1. BeanFactory の作成方法
BeanFactoryだけを使用する場合、次のように作成し、XML 形式のいくつかの Bean 定義を読み込むことができます:
Bean Factory を作成する他の方法は次のとおりです。 getBean(String) を使用すると、Bean のインスタンスを取得できます。BeanFactory のクライアント側の表示は、驚くほどシンプルです。
1.2. BeanFactory メソッド
BeanFactory インターフェースには、クライアントコードが呼び出すためのメソッドが 6 つだけあります。
-
boolean containsBean(String):BeanFactoryに与えられた名前に一致する bean 定義または bean インスタンスがあれば真を返す -
Object getBean(String): 与えられた名前の下で登録した bean のインスタンスを返します。BeanFactoryの設定によりビーンがどのように構成されたかに応じて、シングルトンであるため共有されたインスタンスか、新しく作成されたビーンが返される。 ビーンが見つからない場合 (この場合NoSuchBeanDefinitionExceptionとなる)、あるいはビーンのインスタンス化と準備中に例外が発生した場合にはBeansExceptionが投げられる -
Object getBean(String, Class): 与えられた名前で登録されたビーンを返します。 返された Bean は、与えられた Class にキャストされる。 Bean をキャストできなかった場合、対応する例外が投げられます (BeanNotOfRequiredTypeException)。 さらに、getBean(String)メソッドのすべてのルールが適用されます(上記参照) -
Class getType(String name): 与えられた名前のビーンのClassを返します。 与えられた名前に対応するビーンが見つからなかった場合、NoSuchBeanDefinitionExceptionが投げられる -
boolean isSingleton(String): 与えられた名前の下に登録されたビーン定義またはビーンインスタンスがシングルトンであるかどうかを判断する。 指定された名前に対応するBeanが見つからない場合、NoSuchBeanDefinitionExceptionが投げられる -
String getAliases(String)。 もしビーン定義で定義されていれば、与えられたビーン名のエイリアスを返す
ApplicationContext
ApplicationContext コンテナは、プロパティファイルからテキストメッセージを解決する機能や、関心のあるイベントリスナーにアプリケーションイベントを発行する機能など、より企業特有の機能を追加します。 このコンテナーは org.springframework.context.ApplicationContext インターフェースによって定義されます。
ApplicationContextコンテナーはBeanFactoryコンテナーのすべての機能を含むので、一般にBeanFactoryよりも推奨されています。 BeanFactory は、データ量と速度が重要であるモバイル機器やアプレットベースのアプリケーションのような軽量アプリケーションに使用することができます。 ApplicationContext の種類
最も一般的に使用される ApplicationContext 実装は次のとおりです。
- FileSystemXmlApplicationContext – このコンテナは XML ファイルから Bean の定義をロードします。
- ClassPathXmlApplicationContext – このコンテナは、XML ファイルから Bean の定義をロードします。 ここで、XML ファイルのフルパスを提供する必要はありませんが、このコンテナは CLASSPATH 内の Bean 構成 XML ファイルを探すため、CLASSPATH を適切に設定する必要があります。
- WebXmlApplicationContext – このコンテナは、Web アプリケーション内からすべての bean の定義を持つ XML ファイルをロードします。 ApplicationContext の作成方法
アプリケーション コンテキスト インスタンス化のサンプル コードは次のようになります。