感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Springでコンストラクタを使ってインスタンスを生成するときの定義ファイルの書き方

スポンサーリンク

Springのcofiguration file(設定ファイル)の基礎は以下のようなものです。

<?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="product" class="sample.bean.Product"/>
</beans>

これは、「Productクラスを引数なしのコンストラクタを使ってインスタンスを作ってくれ!」とSpringに命令することになります。
上記のような設定ファイルを使って、デフォルトコンストラクタが存在しない場合はSpringはExceptionを吐きます。

beanを識別するためにはnameかid属性を使います。
Javaのコードの側では、

ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});
Product product1 = context.getBean("product", Product.class);

のように書いて、インスタンスを取得することができます。

またCalendarクラスのようにFactoryMethodがあるクラスは以下のように定義することができます。

<bean id="calendar" class="java.util.Calendar" factory-method="getInstance" />

FactoryMethodが何かわからないという人は、このブログで、「FactoryMethod」とか検索してくれたら、たぶんどっかに出てきます。
デザインパターンのタグをつけてます。

実際にサンプルを作ってみましょう。
Spring Tool Suiteで右クリック→new→Spring Project→Simple Spring Mavenでプロジェクトを作ります。

で、その中のフォルダ構成はこんな感じです。

f:id:sho322:20140429133831j:plain

Example.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) {
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring-config.xml"});
		Person somePerson = context.getBean("person",Person.class);
		somePerson.hello();
		
		Calendar cal = context.getBean("calendar", Calendar.class);
		int year = cal.get(Calendar.YEAR);
		System.out.println(year);
		
	}
}

Person.java

package sample;

public class Person {
	private String name;
	private int 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!");
	}
}

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"/>
    
    <bean id="calendar" class="java.util.Calendar" factory-method="getInstance" />
</beans>

実行結果

hello world!
2014

なんか、昔のSpringとはちょっと書き方が変わったよね。
で、そういうのをちゃんと説明してくれる日本語の書籍が皆無っていう。

これは、SPRING MVC TUTORIALっていう洋書を勉強しながら書きました。

Spring MVC: A Tutorial