Springでコンストラクターインジェクション


スポンサーリンク

Spring Frameworkでは、設定XMLファイルにコンストラクタ・インジェクションの定義をすることで、
値が注入(設定)されたインスタンスを取得することができる。

ここでは実際にコンストラクタ・インジェクションを使って、コンストラクタに引数の値を渡す定義を使ってみようと思う。

まず、ディレクトリ構成から見てみよう。
使うのは、Main.javaとFriend.java。そしてspring-config.xmlです。

まずは、作成するインスタンスを見てみます。
Friend.java

package sample1.bean;

public class Friend {
	private String firstName;
	private String lastName;
	private String interest;
	
	public Friend(){
		
	}
	
	public Friend(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}
	
	public Friend(String firstName, String lastName, String interest) {
		this.firstName = firstName;
		this.lastName = lastName;
		this.interest = interest;
	}
	

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getInterest() {
		return interest;
	}

	public void setInterest(String interest) {
		this.interest = interest;
	}
	
}

普通のbeanですね。
定義ファイルを使って、こいつに値を設定していきます。

spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
       
    <bean name="noArgFriend" class="sample1.bean.Friend" />
    
    <bean name="twoArgFriend" class="sample1.bean.Friend">
    	<constructor-arg name="lastName" value="tomoko" />
    	<constructor-arg name="firstName" value="sawada" />
    </bean>
    
    <bean name="threeArgFriend" class="sample1.bean.Friend">
    	<constructor-arg name="lastName" value="kyoko" />
    	<constructor-arg name="firstName" value="yano" />
    	<constructor-arg name="interest" value="travel" />  
    </bean>

	<bean id="friend1" class="sample1.bean.Friend">
		<property name="firstName" value ="takeshi" />
		<property name="lastName" value="yoshida" />
		<property name="interest" value="soccer" />
	</bean>
       
</beans>

コンストラクタの部分は、"noArgFriend"と"twoArgFriend"と"threeArgFriend"の部分です。
constructor-argタグのnameには引数の名前、valueには値を設定します。

mainがあるファイルは以下です。

package sample1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import sample1.bean.Friend;

public class Main {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});
		
		//引数なしのコンストラクタ・インジェクション
		Friend defaultFriend = context.getBean("noArgFriend", Friend.class);
		if (defaultFriend instanceof Friend) {
			System.out.println("this is friend instance");
		}
		
		Friend twoArgFriend = context.getBean("twoArgFriend", Friend.class);
		System.out.println("私の名前は" + twoArgFriend.getFirstName() +" "+ twoArgFriend.getLastName());
		
		Friend threeArgFriend = context.getBean("threeArgFriend", Friend.class);
		System.out.println("私の名前は" + threeArgFriend.getFirstName() +" "+ threeArgFriend.getLastName());
		System.out.println("趣味は " + threeArgFriend.getInterest() + " です");
		
	}
}

実行した結果は以下のとおりです。

this is friend instance
私の名前はsawada tomoko
私の名前はyano kyoko
趣味は travel です

Spring Framework 4プログラミング入門

Spring Framework 4プログラミング入門