【Java】Spring:context.xmlに設定した値を取得する

■概要

作成する機能の概要は以下の通り。

  • service-context.xmlに値を設定する
  • 取得した値をREST機能で返却する

JavaとSpring Bootのバージョンは以下の通り

項目バージョン
JAVA17
Spring Boot3.3.3

■設定値と出力値

service-context.xmlに設定する項目とREST機能で出力する想定の値を以下に示す。

・service-context.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">

    <!-- Beanの定義 -->
    <bean id="GetDataFromXml#1" class="com.example.demo.get.data.bean.GetDataBean">
        <property name="appVersion" value="1.0.1" />
        <property name="element1" value="huga1" />
        <property name="element2" value="huga2" />
        <property name="element3_1" value="huga3-1" />
        <property name="element3_2" value="huga3-2" />       
    </bean>

</beans>

・出力値(「http://localhost:8080/rest/get/xmldata」アクセス時)

{"element1":"huga1","element2":"huga2","element3-1":"huga3-1","element3-2":"huga3-2","version":"1.0.1"}

■モジュールの階層構造

作成するモジュールの階層構造を以下に示す。

■クラス図

今回作成するモジュールのクラス図を以下に示す。

■サンプルコード

・GetXmlController.java

package com.example.demo.get.data.controller;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.get.data.service.RestService;

@RestController
public class GetXmlController {

	@Autowired
	RestService restService;

	// xmlデータを取得()
	@GetMapping("/rest/get/xmldata")
	public Map<String, String> getXmlDatas() {
		return restService.getDataFromXMList();
	}
}

・RestService.java

package com.example.demo.get.data.service;

import java.util.Map;

public interface RestService {

	// xmlから取得
	public Map<String, String> getDataFromXMList();
}

・RestServiceImpl.java

package com.example.demo.get.data.service;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.get.data.util.GetDataFromXml;

@Service("RestServiceImpl")
public class RestServiceImpl implements RestService {

	@Autowired
	GetDataFromXml getDataFromXml;

	@Override
	public Map<String, String> getDataFromXMList() {

		return getDataFromXml.getDatas();
	}
}

・GetDataFromXml.java

package com.example.demo.get.data.util;

import java.util.Map;
import java.util.TreeMap;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

import com.example.demo.get.data.bean.GetDataBean;

@Component
public class GetDataFromXml {

	public Map<String, String> getDatas() {

		// context.xmlのロード
		ApplicationContext context = new ClassPathXmlApplicationContext("service-context.xml");

		// Beanの取得
		GetDataBean getDataBean = (GetDataBean) context.getBean("GetDataFromXml#1");

		// 返却用リスト
		final Map<String, String> datas = new TreeMap<String, String>();

		// xmlの値を追加
		datas.put("version", getDataBean.getAppVersion());
		datas.put("element1", getDataBean.getElement1());
		datas.put("element2", getDataBean.getElement2());
		datas.put("element3-1", getDataBean.getElement3_1());
		datas.put("element3-2", getDataBean.getElement3_2());

		((ClassPathXmlApplicationContext) context).close();

		return datas;

	}
}

・GetDataBean.java

package com.example.demo.get.data.bean;

public class GetDataBean {

	private String appVersion;
	private String element1;
	private String element2;
	private String element3_1;
	private String element3_2;

	public String getAppVersion() {
		return appVersion;
	}

	public void setAppVersion(String appVersion) {
		this.appVersion = appVersion;
	}

	public String getElement1() {
		return element1;
	}

	public void setElement1(String element1) {
		this.element1 = element1;
	}

	public String getElement2() {
		return element2;
	}

	public void setElement2(String element2) {
		this.element2 = element2;
	}

	public String getElement3_1() {
		return element3_1;
	}

	public void setElement3_1(String element3_1) {
		this.element3_1 = element3_1;
	}

	public String getElement3_2() {
		return element3_2;
	}

	public void setElement3_2(String element3_2) {
		this.element3_2 = element3_2;
	}
}

■実行結果