Spring コンストラクタに順番指定で引数を渡す


スポンサーリンク

コンストラクタインジェクションを行いたいときのサンプルを示します。
コンストラクタに引数を渡したい。その引数は定義ファイルに書いて、インジェクションしたい。

そんなときのサンプルです。

ディレクトリ構成は、こんな感じです。
f:id:sho322:20140506151636j:plain

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="person" class="sample.Person">
    	<constructor-arg index="0" value="Takeshi" />
    	<constructor-arg index="1" value="28" />
    </bean>
    
    <bean id="calendar" class="java.util.Calendar" factory-method="getInstance" />
</beans>

Person.java

package sample;

public class Person {
	private String name;
	private int age;
	
	public Person(){
	}
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void hello() {
		System.out.println("hello world!");
	}
	
	public void goodbye() {
		System.out.println("Good bye...");
	}
}

Example1.java

package di;

import java.util.Calendar;

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

import sample.Person;

public class Example1 {
	public static void main(String[] args) throws InterruptedException {
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring-config.xml"});
		Person takeshi = context.getBean("person",Person.class);
		takeshi.hello();
		System.out.println(takeshi.getName());
		System.out.println(takeshi.getAge());
		
	}
}

これを実行した結果は以下のようになります。

hello world!
Takeshi
28