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.

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