Spring Frameworkにおいて、クラスのフィールドに定数、又はjava.utilパッケージのList、Map、Propertiesを設定したい場合、Bean定義ファイルの書き方について、主に以下の種類があります。
- アノテーションを使用しない場合のBean定義
- アノテーションを使用する場合のBean定義
- util名前空間を使用する場合のBean定義
アノテーションを使用しない場合のBean定義
注入対象クラス
アノテーションを使用しない場合に、注入対象のフィールドに対して、setメソッドを作成する必要があります。
public class B000001BLogic {
// 定数
private String isolation_level;
/**
* 定数の設定
* @param isolation_level
*/
public void setIsolation_level(String isolation_level) {
this.isolation_level = isolation_level;
}
// プロパティ情報
private Properties jdbcConfiguration;
/**
* プロパティ情報の設定
* @param jdbcConfiguration
*/
public void setJdbcConfiguration(Properties jdbcConfiguration) {
this.jdbcConfiguration = jdbcConfiguration;
}
// リスト
private List<String> carList;
/**
* リストの設定
* @param carList
*/
public void setCarList(List<String> carList) {
this.carList = carList;
}
// マップ
private HashMap<String, String> carMap;
/**
* マップの設定
* @param carMap
*/
public void setCarMap(HashMap<String, String> carMap) {
this.carMap = carMap;
}
}
Bean定義ファイル
<bean id="b000001BLogic" class="jp.sample.b000001.blogic.B000001BLogic">
<!-- 定数の定義-->
<property name="isolation_level">
<bean id="java.sql.Connection.TRANSACTION_SERIALIZABLE" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />
</property>
<!-- プロパティファイル情報の定義-->
<property name="jdbcConfiguration">
<bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:SqlMapConfig/jdbc.properties" />
</bean>
</property>
<!-- リストの定義 -->
<property name="carList">
<list value-type="java.lang.String">
<value>Honda</value>
<value>Toyota</value>
</list>
</property>
<!-- Mapの定義 -->
<property name="carMap">
<map>
<entry key="key1">
<value>Honda</value>
</entry>
<entry key="key2">
<value>Toyota</value>
</entry>
</map>
</property>
</bean>
アノテーションを使用する場合のBean定義
Bean定義ファイルにおいて、ListFactoryBean
, MapFactoryBean
といったorg.springframework.beans.factory.config
配下のFactoryBean を利用することで、アノテーションでの値注入が可能となります。また、アノテーションを使用する場合に、setメソッドが不要であるため、ソースコードの可読性が高くなります。
FactoryBeanの種類 | 説明 |
---|---|
FieldRetrievingFactoryBean |
定数の定義 |
PropertiesFactoryBean |
プロパティ情報の定義 |
ListFactoryBean |
リストの定義 |
MapFactoryBean |
マップの定義 |
SetFactoryBean |
セットの定義 |
注入対象クラス
@Component
public class B000001BLogic {
// 定数
@Resource
private String isolation_level;
// プロパティ情報
@Resource
private Properties jdbcConfiguration;
// リスト
@Resource
private List<String> carList;
// マップ
@Resource
private HashMap<String, String> carMap;
}
Bean定義ファイル
<!-- 定数の定義-->
<bean id="isolation_level" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<property name="staticField" value="java.sql.Connection.TRANSACTION_READ_COMMITTED" />
</bean>
<!-- プロパティファイル情報の定義-->
<bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:SqlMapConfig/jdbc.properties" />
</bean>
<!-- リストの定義 -->
<bean id="carList" class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list value-type="java.lang.String">
<value>Honda</value>
<value>Toyota</value>
</list>
</property>
</bean>
<!-- Mapの定義 -->
<bean id="carMap" class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map>
<entry key="key1">
<value>Honda</value>
</entry>
<entry key="key2">
<value>Toyota</value>
</entry>
</map>
</property>
</bean>
util名前空間を使用する場合のBean定義
Spring 2.0 以降で導入された xsd の util 名前空間を使用することで、Bean定義ファイルの可読性が更に高くなります。
utilタグの種類 | 説明 |
---|---|
<util:constant/> | 定数の定義 |
<util:properties/> | プロパティ情報の定義 |
<util:list/> | リストの定義 |
<util:map/> | マップの定義 |
<util:set/> | セットの定義 |
注入対象クラス
@Component
public class B000001BLogic {
// 定数
@Resource
private String isolation_level;
// プロパティ情報
@Resource
private Properties jdbcConfiguration;
// リスト
@Resource
private List<String> carList;
// マップ
@Resource
private HashMap<String, String> carMap;
}
Bean定義ファイル
<!-- 定数の定義-->
<util:constant id="isolation_level" static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE" />
<!-- プロパティファイル情報の定義-->
<util:properties id="jdbcConfiguration" location="classpath:SqlMapConfig/jdbc.properties"/>
<!-- リストの定義 -->
<util:list id="carList" value-type="java.lang.String">
<value>Honda</value>
<value>Toyota</value>
</util:list>
<!-- Mapの定義 -->
<util:map id="carMap" key-type="java.lang.String" value-type="java.lang.String">
<entry key="key1" value="Honda"/>
<entry key="key2" value="Toyota"/>
</util:map>