본문으로 바로가기
반응형

 

 

 

스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있다.

 

 

 

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

 

new AnnotationConfigApplicationContext(AppConfig.class)  코드를 통해

 

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

 

 

 

이번에는 XML을 사용하여 스프링 컨테이너를 생성해보자.

 

 

 

 

 

 

 


● XML 설정 사용  

 

 

 

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.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>

 

 

 

 

 

 

 

기존 애노테이션 기반 설정은 아래와 같다.

 

 

package hello.core;

import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean // 스프링 컨테이너에 등록이 됨
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

    @Bean
    public DiscountPolicy discountPolicy() {
        return new RateDiscountPolicy(); 
    }

}

 

 

xml 기반의 appConfig.xml 스프링 설정 정보와

자바 코드로 된 AppConfig.java 설정 정보를 비교해보면

거의 비슷하다는 것을 알 수 있다.

 

 

 

 

이제는 테스트 코드를 작성하여 

XML 기반 설정이 잘 적용 되어있는지 확인해보자.

 

 

 

 

 

 

 


● 테스트 코드 작성  

 

 

 

 

 

 

 

 

XmlAppContext.java

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;

public class XmlAppContext {

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

 

XML 기반 설정 사용을 할 때 스프링 컨테이너를 생성하려면 

 

GenericXmlApplicationContext 를 사용하면 된다.(기존 AnnotationConfigApplicationContext)

 

 

 

 

테스트 결과는..

 

 

 

 

 

 

정상적으로 수행이 되었다.

 

 

 

 

반응형