LoginSignup
17
18

More than 5 years have passed since last update.

Springフレームワークで定数、List、Map、Propertiesを外部から注入する方法

Posted at

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>
17
18
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18