4月 7th, 2008at 16:43

Tags: ,

Spring2.0.4のIoCコンテナ

このエントリーをはてなブックマークに追加

BeanFactoryはSpringの中で最も重要になるクラス。DI(依存性の注入)をBeanFactoryを使ってみてみる。

インスタンスの生成

BeanFactoryとは別にApplicationContextというクラスを使ってBeanを生成することもできる。「どっちを使えばいいのか?」と悩んでしまうが、ドキュメントには以下のように書いていた。

ユーザはBeanFactoryApplicationContextのどちらが状況に適しているか迷ってしまう。BeanFactoryは大体の場合、インスタンス生成やBeanの設定に使える。ApplicationContextもまた同じで、たくさんのエンタープライズ仕様や、トランザクション処理やAOPといった機能を実現する基盤をサポートしてくれる。ようは、できるだけApplicationContextを使ったほうがいい

XMLBeanFactoryを使う場合

BeanFactoryを実装したXMLBeanFactoryを利用したインスタンス生成。

Resource resource = new ClassPathResource("/com/daipresents/spring204/beans.xml");XmlBeanFactory factory = new XmlBeanFactory(resource);Car car = (Car)factory.getBean("car");

ApplicationContextを使う場合

結局BeanFactoryを取得している感じになる。

ApplicationContext context =       new ClassPathXmlApplicationContext("/com/daipresents/spring204/beans.xml");Car car = (Car)context.getBean("car");

ClassPathXmlApplicationContextのコンストラクタに複数のファイルを指定することもできる。

ApplicationContext context =   new ClassPathXmlApplicationContext(new String[]{"aaa.xml", "bbb.xml"});

XMLBeanFactoryを使ってDIを体感

XMLBeanFactoryを使って「設定を利用から分離する」というDIの概念を勉強。

設定ファイル作成

まずは、設定ファイルを作る。同じクラスを使って、2種類の振る舞いを行ってくれるようにしてみた。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>  <bean id="japan" class="com.daipresents.spring204.test.Message" >     <property name="message" >        <value>こんにちは、世界!</value>     </property>  </bean>  <bean id="usa" class="com.daipresents.spring204.test.Message" >     <property name="message" >        <value>Hello,World.</value>     </property>  </bean></beans>

コンポーネント作成

「設定を利用から分離する」という考えを持って、再利用性が高いコンポーネントになるようにコンポーネント設計を行う。これが多分難しいところなのだが、今回はサンプルなので、設定値を変えるだけで、クラスの振る舞いを変えるという簡単なクラスを作ってみた。

単純に自分に設定されたmessageをspeakメソッドでプリントしてくれるクラス。

public class Message {

   private String message;

   public void speak(){       System.out.println(getMessage());   }

   public String getMessage() {       return message;   }

   public void setMessage(String message) {       this.message = message;   }}

実行クラス作成

用意した設定ファイルからオブジェクトを生成してみる。SpringはWebアプリケーションに特化していないので、mainメソッドから利用することができる。

 public class ExecuteMessage {

   public static void main(String[] args) {

     //リソースを読み込む     Resource resource = new FileSystemResource("D:/daipresents/project/Spring204/conf/beans.xml");

     //リソースを元にファクトリを生成     XmlBeanFactory factory = new XmlBeanFactory(resource);

     //ファクトリからJavaBeanを生成(依存性の注入)     Message japan = (Message)factory.getBean("japan");     Message usa = (Message)factory.getBean("usa");

     //設定を利用から分離することで再利用性が上がり     //コンポーネントとしての独立性が高まる     japan.speak();     usa.speak();

   } }

実行結果は以下のようになる。

こんにちは、世界!Hello,World.

設定ファイルだけで出力文字列を変えることに成功した。

このエントリーをはてなブックマークに追加