Springでプロパティファイルを扱う方法を紹介する。ややこしいことに[PropertiesFactoryBean]を使う方法と[property-placeholder]を使う方法がある。
まずは[PropertiesFactoryBean]を使う方法を試してみる。
ソース
フォルダ構成。
applicationContext.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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="org.yyama.hoge" /> <bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:myProp.properties</value> </list> </property> </bean> </beans>
idを"prop"として、[org.springframework.beans.factory.config.PropertiesFactoryBean]を定義している。
<bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
propertyタグでプロパティファイルの場所を指定している。ここではクラスパス上に存在する"myProp.properties"をプロパティファイルとして指定している。
<property name="locations"> <list> <value>classpath:myProp.properties</value> </list> </property>
プロパティファイルの内容は次のとおり。
myProp.properties。
key=value
続いてFugaクラス。
package org.yyama.hoge; import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Fuga { @Autowired Properties prop; public void proc() throws Exception { System.out.println("key:" + prop.getProperty("key")); } }
"prop"という変数名でPropertiesクラス型の変数を宣言している。このPropertiesクラスはJava標準のクラスだ。ここに@Autowiredアノテーションを付与することにより、applicationContext.xmlで宣言したPropertiesFactoryBeanのプロパティファイルが自動でインジェクションされる。
"prop"という変数名はapplicationContext.xmlで指定したidと一致している必要がある。
@Autowired
Properties prop;
PropertiesFactoryBeanクラスとPropertiesクラスはキャストはできないのだが、なぜかインジェクションされる。 内部でPropertiesFactoryBeanクラスのgetObject()クラスが呼ばれていると思われる。詳しくはJavadoc参照。
最後にMainクラス。特別なことはしていない。
package org.yyama; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.yyama.hoge.Fuga; public class Main { public static void main(String... args) throws Exception { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); ctx.getBean(Fuga.class).proc(); ctx.close(); } }
実行すると次のような出力を得られた。
key:value
このように非常に簡単にプロパティファイルを使用することができる。
今日はここまで。
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者:株式会社NTTデータ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/21
- メディア: 大型本