티스토리 뷰

반응형

ApplicationContext는 자바의 환경설정파일을 만들 때 다양한 방식으로 정보를 만들 수 있도록 도와준다.

아래 그림을 확인해보면 Annotation을 이용할 수 있도록 도와주는 AnnotationConfigApplicationContext
XML파일로 환경설정 될 수 있도록 도와주는 GenericXmlApplicationContext 등이 있다.

 

 

우리는 보통 어노테이션을 활용한 AnnotationConfigApplicationContext를 사용한다.
(스프링부트를 많이 사용하면서 XML기반은 잘 사용하지 않는다)
그래도 간단하게 예제로 알아보며 비교해보자

1. 어노테이션 이용하여 Bean등록하기

어노테이션을 이용하려면 AnnotationConfigApplicationContext을 사용한다.

AppConfig.java를 하나씩 뜯어본다면,
스프링컨텍스트에 올려놓고자 하는 환경설정 파일에는 @Configurable을 상단에 작성한다
올려놓고자하는 Bean객체에 @Bean을 입력한다.

public 인터페이스명 빈객체명() {
  return new 구현체();
}

또한, getMemberRepository는 공통으로 사용하여 중복을 제거해주었다.
아래 완성된 소스를 확인해보자

AppConfig.java
@Configurable
public class AppConfig {

    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(getMemberRepository());
    }

    @Bean
    private MemberRepository getMemberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(getMemberRepository(), getDiscountPolicy());
    }

    @Bean
    private DiscountPolicy getDiscountPolicy() {
        return new RateDiscountPolicy();
    }
}

그렇다면 위 환경설정파일이 잘 되었는지 확인해보자.

@Test
@DisplayName("Xml App Test")
void getXmlAppContext(){
  ApplicationContext ac = new AnnotationConfigApplicationContext("AppConfig.java");
  MemberService memberService = ac.getBean("memberSerivce", MemberService.class);
  Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
}

그렇다면 XML은 어떻게 작성하는걸까?

 

 

2. XML 이용하여 Bean등록하기

여기도 하나씩 본다면

<bean id="Bean이름" class="Bean Class 위치">
      <constructor-arg name="사용되는 매게변수 Bean 이름" ref="bean으로 선언된 이름">
</bean>

설명이 헷갈렸다면 아래 소스를 확인해보자

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

자, 그렇다면 위 환경 설정 파일이 모두 잘 돌아가는지 확인해보자

public class XmlAppContext {

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

ㅎㅎ! 잘돌아간다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함