3.2. Container overview

概要

Springにおける「コンテナ」という概念について。
・ApplicationContextがSpringIOCのコンテナを表す。
・ApplicationContextの実装で代表的なものとして、ClassPathXmlApplicationContextやFileSystemXmlApplicationContextがある。
・普通はApplicationContextの生成処理は実装しなくてよい。Webアプリケーションならweb.xmlに8行程度書けばよい。
・web.xml自体、SpringSource Tool Suite つかえば簡単に生成できる。

特に躓く点なし。次。

3.2.1 Configuration metadata

Beanを定義するメタデータとしては以下の3つがある

  1. XML
  2. アノテーション(オートワイアリング)
  3. JavaBasedConfiguration(@Configuration,@Bean)

SpringIOCの範囲で生成されるオブジェクトについては、上記のいづれかで設定を定義する。

またコンテナから取得するのではなく、ValueObjectやEntityBeanなどアプリケーションが直接newする(コンストラクタを呼び出す)ようなオブジェクトに対して、インジェクションなどの介入を行うこともできる。このためにはAspectJを使う。詳しくはひとまずここ参照(まだ見てない)。

コンテナから取得するBean以外についても介入できる点は覚えておいたほうが良さそう。結構ニーズはありそうですよね。でもそのあたり(アスペクト関連)はだいぶ先なので次、

3.2.2 Instantiating a container

大事なことなので繰り返すがContainer=ApplicationContext。なのでコンテナの生成とはApplicationContextをnewすることです。以下に例を挙げる。


  ApplicationContext context =
  new ClassPathXmlApplicationContext
(new String[] {"services.xml", "daos.xml"});
  Beanの定義をXMLで定義する場合は、複数のファイルにわけて上記のように指定することができるし、次に述べるようにXMLをインポートすることもできる。

 
3.2.2.1 Composing XML-based configuration metadata

ということで、XMLのimportの例。









3.2.3 Using the container

コンテナを使用するには、ApplicationContext#getBeanを使って起点となるBeanを取得する。


ApplicationContext context =
new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"});
PetStoreServiceImpl service =
context.getBean("petStore", PetStoreServiceImpl.class);
List userList service.getUsernameList();

今のところふーんって感じ。