SpringFrameworkでDIコンテナ(2)
※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい
2008-02-07
今回も、前回と同じ記事から、Spring Framework によって「依存オブジェクト」を注入するところを確認するサンプルを試します。DI では「オブジェクト同士の関連」も「設定」であると見なして実装から切り離すことができるみたいです。
・[@IT:DI:依存性の注入とは何か?]Spring Frameworkで理解するDI(1)
まずは、クラス図とソースを見て、実装するモジュールの内容を確認します。そして、前回と同じように、SpringTest.java, ChildHorse.java,ParentHorse.java, applicationContext.xml を作成します。ChildHorse.java と ParentHorse.java は継承関係ではなく、コンポジションを使ったパターンでしょうか。ソースは記事のものから名前を変更しています。
[SpringTest.java]
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.
ClassPathXmlApplicationContext;
public class SpringTest {
public static void main(String args[]){
ApplicationContext contxt = new ClassPathXmlApplicationContext("applicationContext.xml");
Parent parent = (Parent)contxt.getBean("parent");
System.out.println( "親オブジェクトの設定情報:"+ parent.getName());
Child child = parent.getChild();
System.out.println( "子オブジェクトの設定情報:" + child.getName());
}
}
[ChildHorse.java]
public class ChildHorse {
private String name;
private Integer no;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getNo() { return no; }
public void setNo(Integer no) { this.no = no; }
}
[ParentHorse.java]
public class ParentHorse {
public ParentHorse() {}
private ChildHorse childHorse;
private String name;
public ChildHorse getChildHorse() { return childHorse; }
public void setChildHorse(ChildHorse childHorse) { this.childHorse = childHorse; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
[applicationContext.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="childHorse" class="ChildHorse">
<property name="name" >
<value>子供</value>
</property>
<property name="no" >
<value>1</value>
</property>
</bean>
<bean id="parentHorse" class="ParentHorse" >
<property name="childHorse" >
<ref bean="childHorse" />
</property>
<property name="name">
<value>親</value>
</property>
</bean>
</beans>
構成は以下になります。
(.classpath と .project は省略します)
spring | +-- lib | | | +-- commons-logging-1.1.jar | | | +-- spring.jar | +-- applicationContext.xml | +-- ChildHorse.java | +-- ParentHorse.java | +-- SpringTest.java
実行してみると、下記が表示されます。表示されない場合はソースやクラスパスなどを確認して下さい。
親オブジェクトの設定情報:親 子オブジェクトの設定情報:子供
内部で行われていることは以下の通りです。記事の説明がわかりやすいので引用します。
(オブジェクト名を少し変更しています)
[引用(開始)] Springのコンテナが、外部ファイル applicationContext.xml に従って ParentHorse オブジェクトと ChildHorse オブジェクトを組み立てます。 そして Spring Framework の ApplicationContext が、SpringTest という アプリケーションからの呼び出しに応じて、組み立てられたオブジェクトを返し、 親と子のオブジェクトに設定した値を表示します。 [引用(終了)] 次回も次のサンプルを試してみたいと思います。
関連記事
上記の記事に関連する記事(最新の10件)です。


