(Java Spring) 2-30. 다양한 설정 형식 지원 – Java 코드, XML

  • by

(Java Spring) 2-30. 다양한 설정 형식 지원 – Java 코드, XML



1. 스프링 컨테이너는 다양한 형태의 구성 정보를 받을 수 있도록 유연하게 설계되었습니다.

  • Java 코드, XML, Groovy 등


2. 주석 기반 Java 코드 설정 사용

  • 지금까지 했던 것이다.

  • new AnnotationConfigApplicationContext (AppConfig.class)
  • AnnotationConfigApplicationContext 클래스를 사용하면서 Java 코드의 설정 정보를 전달합니다.

3. XML 설정 사용

  • 최근에는 스프링 부팅을 많이 사용하면서 XML 기반 구성이 잘 사용되지 않습니다.

    아직 많은 레거시 프로젝트가 XML로 되어 있고, 또 XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 메리트도 있으므로, 한 번 정도 배워 두는 것도 괜찮다.

  • GenericXmlApplicationContext를 사용하면서 xml 구성 파일을 전달하면 됩니다.

4. test > java > hello.core > xml 패키지 생성


5. XmlAppContext 클래스 생성


6. 코드 작성

package hello.core.xml;

import hello.core.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);
    }
}

7. main > resources > 신규 > XML 구성 파일 > Spring 구성


8. appConfig.xml 생성


9. 코드 작성

<?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.core.member.MemberServiceImpl">
        <constructor-arg name="memberRepository" ref="memberRepository"/>
    </bean>
    <bean id="memberRepository" class="hello.core.member.MemoryMemberRepository"/>

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

10. XmlAppContext 빌드


11. xml 기반 appConfig.xml 스프링 구성 정보와 Java 코드의 AppConfig.java 설정 정보를 비교하면 거의 비슷하다는 것을 알 수 있습니다.

12. xml 기반 설정은 최근에 잘 사용되지 않으므로 이 정도로 마무리하고 필요하다면 Spring 공식 참조 문서를 확인하자.

Spring | 홈

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io