SpringFrameworkでDIコンテナ(3)

SpringFrameworkでDIコンテナ(3)

JavaSpringFrameworkでDIコンテナ(3)

今回も、前回と同じ記事から、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 の原則である「設定を利用から分離する」ことを実現できます。次回も次のサンプルを試してみたいと思います。

最終更新日:

関連記事

人気記事

新着情報