読者です 読者をやめる 読者になる 読者になる

「Spring」 PropertyPlaceholderConfigurer で Bean 定義ファイルから設定を外出しする

PropertyPlaceholderConfigurer 使うと Bean 定義ファイルから設定を外出しできます。

Spring Framework Reference Documentation
- Example: the PropertyPlaceholderConfigurer
< http://docs.spring.io/spring/docs/3.2.13.RELEASE/spring-framework-reference/htmlsingle/#beans-factory-placeholderconfigurer >

使う場面としては JDBC の設定とかそんなのが多いと思うので、設定される側のクラスを自分で作るってのはそう多くなさそうですが、以下の感じで getter / setter 持つクラスを作ってやるだけで簡単にできます。

■ Person.java

package com.example.placeholder;

public class Person {
	private int id;
	private String name;

	public int getId() { return id; }

	public void setId(int id) { this.id = id; }

	public String getName() { return name; }

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

■ placeholder.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"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
        
  <context:property-placeholder location="classpath:test.properties"/>
  
  <bean id="person1" class="com.example.placeholder.Person">
    <property name="id" value="${id1}" />
    <property name="name" value="${name1}" />
  </bean>
  <bean id="person2" class="com.example.placeholder.Person">
    <property name="id" value="${id2}" />
    <property name="name" value="${name2}" />
  </bean>
  
  <context:annotation-config />
  <context:component-scan base-package="com.example.placeholder" />
</beans>

■ test.properties

id1=1
name1=hoge
id2=2
name2=uga

■ Main.java

package com.example.placeholder;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("placeholder.xml")) {
			Person p1 = (Person) context.getBean("person1");
			System.out.println(p1.getId() + " : " + p1.getName());

			Person p2 = (Person) context.getBean("person2");
			System.out.println(p2.getId() + " : " + p2.getName());
		}
	}
}

■ 実行結果

1 : hoge
2 : uga


以上です。

[ 環境情報 ]
Windows 7 SP1
Java SE 7 Update 51
Spring Framework 3.2.13