SpringFrameworkでDIコンテナ(3)
※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい
2008-02-07
今回も、前回と同じ記事から、Spring Framework によって「1対多」の多重度を持つ関連を注入するサンプルを試します。Spring Framwork ではこういった多重度を持つ関連を、java.util.List インターフェイスを使って注入するようです。
・[@IT:DI:依存性の注入とは何か?]Spring Frameworkで理解するDI(1)
まずは、クラス図とソースを見て、実装するモジュールの内容を確認します。そして、前回と同じように、SpringTest.java, ParentHorse.java,applicationContext.xml を作成します。ソースは記事のものから名前を変更しています。applicationContext.xml の Child の定義が不要に思うのは私だけ?
[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");
ParentHorse parentHorse = (ParentHorse)contxt.getBean("parentHorse");
for(int i = 0; i < parentHorse.getManyValues().size(); i++) {
System.out.println( "1対多の情報:" + parentHorse.getManyValues().get(i));
}
}
}
[ParentHorse.java]
import java.util.List;
public class ParentHorse {
public ParentHorse() {}
private List manyValues;
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public List getManyValues() {
return manyValues;
}
public void setManyValues(List manyValues) {
this.manyValues = manyValues;
}
}
[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="parentHorse" class="ParentHorse" >
<property name="manyValues">
<list>
<value>1番目の値</value>
<value>2番目の値</value>
</list>
</property>
<property name="name">
<value>親</value>
</property>
</bean>
</beans>
構成は以下になります。
(.classpath と .project は省略します)
spring | +-- lib | | | +-- commons-logging-1.1.jar | | | +-- spring.jar | +-- applicationContext.xml | +-- ParentHorse.java | +-- SpringTest.java
実行してみると、下記が表示されます。表示されない場合はソースやクラスパスなどを確認して下さい。
1対多の情報:1番目の値 1対多の情報:2番目の値
このように、Spring Framework では DI の原則である「設定を利用から分離する」ことを実現できます。次回も次のサンプルを試してみたいと思います。
関連記事
上記の記事に関連する記事(最新の10件)です。


