連載
» 2007年09月28日 00時00分 公開

Spring 2.0時代の開発スタイル(2):Springは「2.0」でどんだけ便利になったの? (3/3)

[山本大,クロノス]
前のページへ 1|2|3       

定数を扱う<util:constant/>

 utilネームスペースの<util:constant />タグは、構成ファイルの中で定数を扱うために利用するタグです。

 このタグを使う場合の構成ファイルへの記述量を、以前より利用されているDTDを使った場合と、新しいXSDを使った場合の2つの方法で比較してみましょう。以下のリスト3はDTDを使った定数の利用サンプルであり、次のリスト4はXSDのutilネームスペースに含まれるutil:constantタグを利用して同じ内容を省略記述したサンプルです。

リスト3 DTDを使って定数を扱う構成ファイルサンプル(太字部分が定数読み込み)
<bean id="service" class="net.kronos_jp.spring2.ServiceImpl">
  <property name="isolation">
    <bean id="java.sql.Connection.TRANSACTION_SERIALIZABLE"
      class="org.springframework.beans.factory.config.FieldRe
trievingFactoryBean
" />
    </property>
</bean>

 以前のDTDを使った定数読み込みでは、上記(リスト3)のようにFieldRetrievingFactoryBeanクラスを完全修飾名で記述する必要がありました。定数を扱う記述であることも読み取りにくいと感じられます。次にXSDを使うサンプルをリスト4で見ていきましょう。

リスト4 utilネームスペース(XSD)を使って定数を扱う構成ファイルサンプル(太字部分が定数読み込み)
<bean id="service" class="net.kronos_jp.spring2.ServiceImpl">
  <property name="isolation">
    <util:constant
      static-field="java.sql.Connection.TRANSACTION_SERIALIZABL
E
" />
  </property>
</bean>

 上記のリスト4では、定数を参照していることが一目瞭然であり、記述もコンパクトです。定数の参照は頻繁に発生する記述であり、コンパクトに記述できることで可読性と生産性の両面でメリットがあります。

定義済みBeanプロパティーへの参照を定義<util:property-path/>

 utilネームスペースに含まれる<util:property-path/>タグは、定義済みのBean定義のプロパティーを別のBean定義から参照するためのタグです。このタグの効果を見るために、まず参照先のBeanとしてリスト5を定義します。

リスト5 util:property-pathタグの利用サンプル(1)参照先Bean定義
<!-- name属性によって参照されるBeanの定義。-->
<bean id="targetPathTest" class="Target" scope="prototype">
  <property name="message" value="Hello World!"/>
</bean>

 上記のBean定義(リスト5)の中のmessageというname属性を別のBean定義から参照する場合、以前のDTDでは以下のように、Springが提供するPropertyPathFactoryBeanを使って記述する必要がありました。

リスト6 util:property-pathタグの利用サンプル(2)DTDによる定義
<bean id="targetPathTest.message"
  class="org.springframework.beans.factory.config.PropertyPathFactoryB
ean" />

 XSDを利用する場合は、以下のような記述になります。path属性には、「beanName.beanProperty」という記述書式を使って参照先のプロパティーを記述します。

リスト7 util:property-pathタグの利用サンプル(3)XSDによる定義
<util:property-path id="message" path="targetPathTest.message"/>

 この例でも記述量が少なくなり、可読性が向上していることが分かります。

プロパティーから値を取得する<util:properties/>

 <util:properties/>タグはプロパティーファイルを読み込むためのタグです。以前のDTDの設定では、SpringのPropertiesFactoryBeanを使って設定を取得します。

リスト8 util:propertiesタグの利用サンプル(1)DTDによる定義
<bean id="jdbcConfiguration"   class="org.springframework.beans.factory.config.PropertiesFactoryBea
n">
  <property name="location"
    value="classpath:net/kronos_jp/jdbc.properties"/>
</bean>

 XSDを使って上記と同様の結果を得るためには、以下のように記述します。

リスト9 util:propertiesタグの利用サンプル(2)XSDによる定義
<util:properties id="jdbcConfiguration"   location="classpath:net/kronos_jp/jdbc.properties"/>

コレクションを簡単に利用する<util:list/>

 XSDを使ったSpring 2.0の構成ファイルで、コレクションオブジェクトのインスタンスを定義する場合には、「<util:list/>」「<util:map/>」「<util:set/>」のタグが便利です。これらのタグを使うことで、コレクション型のBean定義を容易に作成できます。

リスト10 util:listタグの利用サンプル(1)XSDによる定義
<bean id="target" class="Target" >
  <property name="errorMessages"><ref bean="messages"/></property>
</bean>
<util:list id="messages">
  <value>入力項目にエラーがあります。</value>
  <value>マスタデータがありません。</value>
  <value>システムエラーが発生しました。</value>
  <value>日付のフォーマットが異なります。</value>
</util:list>

 また、リストインターフェイスの具象クラスとして明示的に実装クラスを指定したい場合は、「list-class」属性を利用します。

 例えば、java.util.LinkedListをインスタンス化したい場合は以下のように記述します。「list-class」を指定しない場合は、コンテナ(Spring Framework)がインスタンス化するクラスを自動的に選択します。

リスト11 util:listタグの利用サンプル(2)XSDで具象クラスを指定
<util:list id="messages" list-class="java.util.LinkedList">
  <value>入力項目にエラーがあります。</value>
  <value>マスタデータがありません。</value>
  <value>システムエラーが発生しました。</value>
  <value>日付のフォーマットが異なります。</value>
</util:list>

 DTDによる設定では、以下(リスト12)のようにSpringのListFactoryBeanを利用していました。

リスト12 util:listタグの利用サンプル(3)DTDによる定義
<bean id="messages3"   class="org.springframework.beans.factory.config.ListFactoryBean">
  <property name="sourceList">
    <list>
      <value>入力項目にエラーがあります。</value>
      <value>マスタデータがありません。</value>
      <value>システムエラーが発生しました。</value>
      <value>日付のフォーマットが異なります。</value>
    </list>
  </property>
</bean>

コレクションを簡単に利用する<util:set/>と<util:map/>

 setやmapを扱うための<util:set/>タグや<util:map/>タグも、前述の<util:list/>タグとよく似ています。

 <util:set/>タグは、<util:list/>タグとほとんど同じように利用できます。

リスト13 util:setタグの利用サンプル XSDによる定義
<util:set id="messages5" >
  <value>入力項目にエラーがあります。</value>
  <value>マスタデータがありません。</value>
  <value>システムエラーが発生しました。</value>
  <value>日付のフォーマットが異なります。</value>
</util:set>

 <util:map/>タグではキーと値のセットを保持するためentryタグを子要素として利用します。

リスト14 util:mapタグの利用サンプル XSDによる定義
<util:map id="messages" >
  <entry key="inputError" value="入力項目にエラーがあります。" />
  <entry key="noMasterError" value="マスタデータがありません。" />
  <entry key="systemError" value="システムエラーが発生しました。" />
  <entry key="dateFormatError"
    value="日付のフォーマットが異なります。"/>
</util:map>

AOPやBeanスコープにも新機能が!

 今回はSpring 2.0の新機能の概要を説明し、それら新機能の中でも最も際立った変更である「XSDによる構成ファイル定義の記述方法」を紹介しました。これらの新機能はSpring 2.0での開発スタイルに大きな影響を与えることでしょう。

 次回は<aop:〜/>タグを使ったSpringAOPの利用方法と、新規追加されたBeanスコープ(session、request)の使い方についてサンプルを交えて解説します。

@IT関連記事

DIとAOPがサーバ・コンポーネント技術を変える
J2EE Watch(7) EJBのような重量級のコンテナに対するアンチテーゼとして登場したDI。いまやDI+AOPは、J2EEの未来にも影響を与える存在となりつつある
Java Solution」フォーラム 2005/6/17

Spring Frameworkで理解するDI
最近よく耳にする「DI」は、オブジェクトの再利用性を高めるとして注目される新しい考え方だ。このDIをSpringを使いながら理解する
第1回 DI:依存性の注入とは何か?(2005/4/29)
第2回 Springフレームワークの設計思想とAOP(2005/11/23)
第3回 AOPサンプルアプリで理解するAOP(2005/12/3)
第4回 なぜDIコンテナを使うのか(2006/8/10)
連載各回の解説はこちら

Java EE 5マイグレーションプラクティス
「Java EE 5」の登場は近い。マイグレーションの近道は、実はJSF、Spring、Hibernateを使い、理解するところにある
第1回 JSF・Spring・Hibernateで次世代Javaに備える(2005/7/6)
第2回 鍵はPOJOベースのアプリケーション・デザイン(2005/7/23)
第3回 JSFベースのプレゼンテーション・デザインを考える(2005/8/27)
第4回 擬似EJB3.0環境をSpringとXDocletで作る(2005/10/20)
第5回 Sインテグレーション層のDAOデザインを考える(2006/1/6)
連載各回の解説はこちら

Seasar Projectの全貌を探る
国産オープンソースプロダクトのコミュニティとして急成長するSeasar2。大手SIerもサポートを表明したJ2EEプロダクトの全貌を探る
第1回 次世代J2EEを目指すSeasar2はどう誕生したか(2005/6/9)
第2回 DI+AOPを実現するSeasar V2(2005/7/16)
第3回 SeasarV2によるDBアクセス機能(2005/9/3)
第4回 SeasarV2によるテスト機能(2005/10/1)
第5回 SeasarのO/RマッピングツールS2Dao(2005/12/23)
第6回 SeasarのDBアクセスにHibernateを使う (2006/1/19)
連載各回の解説はこちら

アスペクト指向プログラミング オーバービュー
The Rational Edge(24) IT業界はソフトウェア構築アプローチの改良の歴史でもある。このラインアップに最近加わったのが、アスペクト指向プログラミングだ
情報マネジメント > アーキテクチャ 2004/4/13

アスペクト指向のバリエーション解説
この連載では「アスペクト指向とは何か?」というところから始め、AspectJやJBossAOPなどを用いたAOPの実装を紹介していく
第1回 アスペクト指向の基礎とさまざまな実装
第2回 AspectJから学ぶアスペクト指向の理解
第3回 JBoss AOPとAOPフレームワークの役目
第4回 「AspectWerkz」の利用法
第5回 アスペクト指向理解のまとめ
情報マネジメント > アーキテクチャ


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。