TOP比較データ> Spring におけるDIの仕組みと設定方法
徹底比較!!DIxAOPコンテナ
DIxAOPコンテナ「Seasar2とSpring」

第4回:Springの導入によるDIの実現
著者:豆蔵  長谷川 裕一、竹端 進   2005/12/2
前のページ  1  2  3   4  次のページ
Spring におけるDIの仕組みと設定方法

   それでは、サンプルから少し離れてSpringのDIの仕組みとDIの設定方法を解説します。
DIの仕組み

   SpringがDIを実現する仕組みの実態(SpringのDIコンテナといわれる部分)は、BeanFactoryとBeanFactoryの上位にあたりリソース管理なども行うApplicationContextになります。

   BeanFactoryは、実行時に渡される定義ファイル(デフォルト名は"applicationContext.xml")を利用してオブジェクト(注)の管理と構成を行うものです。

※注: Seasarではコンポーネントと呼んでいるものです。Springではオブジェクトと記載しますが基本的には同じものです

   DIの利用者は、Unitテストなどの場合を除くとBeanFactoryやApplicationContextを直接利用(リスト8)することは少ないでしょう。WebアプリケーションなどではBeanFactoryにメッセージリソースやイベント処理を追加したApplicationContextが利用されます。

リスト8
Resource resource = new ClassPathResource("Bean定義ファイル.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
クラス名 オブジェクト名 = (クラス名)beanFactory.getBean("オブジェクト名");
定義ファイル

   定義ファイルはXMLファイルとして記述されます。リスト9は定義ファイルの記述例です。

リスト9
<beans>
     <bean id="オブジェクト名A " class="パッケージ名.クラス名A">
          <property name="変数名" value= "文字列1" />
          <property name="変数名" value= "文字列2" /> </bean>
     <bean id="オブジェクト名B" class="パッケージ名.クラス名B" />

     <bean id="オブジェクト名C" class="パッケージ名.クラス名C">
          <property name="変数名" ref="オブジェクト名B" />
     </bean>
</beans>
   次に詳しいタグの利用方法を表6と表7に記載します。beanタグはDIコンテナが管理するオブジェクトの設定をおこなうものです。beanタグに設定できる代表的な属性を表1に示します。

属性 意味
id システム内で一意とするオブジェクト名
name Bean定義ファイル内で、id以外に名前を設定したい場合に設定する別名。空白、「,」、「;」で区切ることにより、複数の値を設定できる
class idの実態。パッケージ名+クラス名
singleton true 属性を省略した場合のデフォルト。メソッドgetBeanで取得するオブジェクトはシングルトン
false メソッドgetBeanで取得するオブジェクトは毎回インスタンス化されたもの

表6:beanタグの属性

   表7はオブジェクト間の依存関係をBean定義ファイルでおこなう代表的な例です。

オブジェクト間の依存関係
表7:オブジェクト間の依存関係
(画像をクリックすると別ウィンドウに拡大表示します)

   定義ファイルが大きいと可読性が悪くなり、管理するのが大変になります。また、開発チームを複数に分けるときには定義ファイルも複数に分ける必要があります。SpringのBean定義ファイルは分割することができます。

   リスト10はWebアプリケーションで2つの定義ファイルを設定している"web.xml"の例です。例のように分割した定義ファイルは、ブランクかセミコロン(;)、カンマ(,)で区切って記述します。

リスト10:定義ファイルの分割例
<context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>
          /WEB-INF/applicationContext.xml
          /WEB-INF/applicationContext-petsite.xml
     </param-value>
</context-param>
前のページ  1  2  3   4  次のページ


株式会社豆蔵 長谷川 裕一
著者プロフィール
株式会社豆蔵  長谷川 裕一
XMLの技術開発やCORBA、EJBを使用したシステム開発などを経て、現在はアジャイル開発プロセスの導入から工学的なソフトウエアプロセスの策定、オープンソースプロダクトに関するコンサルタント、アーキテクトとして常に第一線で活躍。共著として「プログラムの育てかた 現場で使えるリファクタリング(ソフトバンク)」、「Spring入門(技術評論社)」。


株式会社豆蔵 竹端 進
著者プロフィール
株式会社豆蔵  竹端 進
鉄鋼系SIerを経て現職に。現在はオープンソースプロダクトに関するコンサティング、開発支援、教育を行うチームに所属。日々、新たな技術をどのように生かしていくかを考える毎日。現在の注目対象はSeasar2とMaven。


INDEX
第4回:Springの導入によるDIの実現
  サンプルを用いたSpringによるAADL3への道
  宣言トランザクション管理
Spring におけるDIの仕組みと設定方法
  トランザクションの設定