1 분 소요

다양한 설정 형식 지원 -자바 코드, XML

스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있다.
대표적으로 자바 코드, XML, Groovy 등등 여러가지 형식으로 설정 정보 저장할 수 있다.


jpeg


애노테이션 기반 자바 코드 설정 사용

이전까지 구현한 방법이 애노테이션 기반 자바 코드 설정을 사용한 것이다.

new AnnotationConfigApplicationContext(AppConfig.class)

를 통해 AnnotationConfigApplicationContext 클래스를 사용하면서 자바 코드로 된 설정 정보를 넘기면 된다.

XML 설정 사용

XML 기반 설정은 최근에 스프링 부트를 많이 사용하게 됨으로써 잘 사용하지 않게 되었다.
하지만 아직까지 XML로 이루어진 많은 레거시 프로젝트 들이 존재하기도 하고
XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있기 때문에 어노테이션 기반 자바 코드 설정 보다 좋은 장점 또한 존재한다.

GenericXmlApplicationContext("appConfig.xml");

를 사용하여 xml설정 파일을 넘기면 된다.

XmlAppConfig 사용 자바 코드

package hello.spring_basic.xml;

import hello.spring_basic.member.MemberService;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

import static org.assertj.core.api.Assertions.assertThat;

public class XmlAppContext {

    @Test
    void xmlAppContext() {
        ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
        MemberService memberService = ac.getBean("memberService", MemberService.class);
        assertThat(memberService).isInstanceOf(MemberService.class);
    }
}

xml 기반의 스프링 빈 설정 정보

-> src/main/resources/appConfig.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id = "memberService" class = "hello.spring_basic.member.MemberServiceImpl">
        <constructor-arg name = "memberRepository" ref = "memberRepository" />
    </bean>

    <bean id = "memberRepository"
          class = "hello.spring_basic.member.MemoryMemberRepository" />

    <bean id = "orderService" class = "hello.spring_basic.order.OrderServiceImpl">
        <constructor-arg name = "memberRepository" ref = "memberRepository" />
        <constructor-arg name = "discountPolicy" ref = "discountPolicy" />
    </bean>

    <bean id="discountPolicy" class="hello.spring_basic.discount.RateDiscountPolicy" />
</beans>


위 XmlAppContext 클래스를 실행시켜보면
png


아무 문제없이 잘 실행되는 것으로 보아
xml 기반의 appConfig.xml 스프링 설정 정보와 자바 코드로 된 AppConfig.java 설정 정보를 비교해보면 거의 비슷하다는 것을 알 수 있다.
다만 xml 기반으로 설정하는 것은 최근에 잘 사용하지 않는다.

Reference :

김영한 강사님 스프링 핵심 원리 - 기본편 강의 중