본문 바로가기
Develop/Spring (이론)

스프링의 다양한 설정 형식 지원 - 자바 코드 , XM

by 보보트레인 2023. 8. 10.

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

ex ) 자바 코드, XML, Groovy 등등

 

그림 설명

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

- 일반적인 스프링 설정 방식이다.

- new AnnotationConfigApplicationContext(AppConfig.class)`
- `AnnotationConfigApplicationContext` 클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다.

 

지금까지 해온 것이니 실습 생략한다.

 

XML 설정 사용

 

-  요즘의 스프링 부트에서는 사용하지 않지만, 과거의 레거시 프로젝트에서 주로 사용됨.
- `GenericXmlApplicationContext` 를 사용하면서 `xml` 설정 파일을 넘기면 된다.

 

<실습>

1. resource에 XML Configuration File > Spring Config파일을 생성

2. 파일명 : 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" >
        <!--생성자 넘겨줘야함  -> memberRepository로 만들려고 하는데 없으니 아래에서 새로 bean 만들어줌-->
        <constructor-arg name="memberRepository" ref="memberRepository" />
    </bean>

    <!--memberRepository 만들어줌-->
    <bean id="memberRepository" class="hello.core.member.MemoryMemberRepository" ></bean>

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

3. 다음과 같이 코드 작성하여 bean 생성 야무지게 해준다.

 

이 방식은 우리가 annotation (bean) 을 사용하는 것과 100% 일치하는 작업이다.

예시

4. TDD 실행

 

코드는 다음과 같다.

package hello.core.xml;
import hello.core.member.MemberService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import static org.assertj.core.api.Assertions.*;

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

 

5. 결과 확인

Bean이 잘 생성됨을 알 수 있다. > singleton bean으로 생성됐다는 뜻은  싱글톤 방식으로 생성됐다는 것인데 뒤에서 계속..

반응형