ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

SpringでList自体をBeanとして定義する

Listの要素にしたいクラス(Config.java)

package com.example.utillist;

public class Config {
    private int num;
    private String data;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
    
}

XML定義(config.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util"
    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.xsd
        http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd">

    <util:list id="configList" value-type="com.example.utillist.Config">
        <ref bean="config0" />
        <ref bean="config1" />
        <ref bean="config2" />
    </util:list>

    <bean id="config0" class="com.example.utillist.Config">
        <property name="num" value="0" />
        <property name="data" value="this is cofig 0" />
    </bean>
    <bean id="config1" class="com.example.utillist.Config">
        <property name="num" value="1" />
        <property name="data" value="this is cofig 1" />
    </bean>
    <bean id="config2" class="com.example.utillist.Config">
        <property name="num" value="2" />
        <property name="data" value="this is cofig 2" />
    </bean>
</beans>

利用

package com.example.utillist;

import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource("classpath:config.xml")
public class UtillistApplication {

	public static void main(String[] args) {
		var applicationContext = SpringApplication.run(UtillistApplication.class, args);
		List<Config> list = (List)applicationContext.getBean("configList");
		list.forEach(config -> {
			System.out.println(config.getNum() + ":" + config.getData());
		});
	}

}