반응형

스프링 컨테이너의 다양한 설정 형식

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

XML 설정 사용

  • XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점이 있다.
  • 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="com.devhistory.springcoreprinciple.member.MemberServiceImpl">
        <constructor-arg name="memberRepository" ref="memberRepository"/>
    </bean>

    <bean id="memberRepository" class="com.devhistory.springcoreprinciple.member.MemoryMemberRepository"/>

    <bean id="orderService" class="com.devhistory.springcoreprinciple.order.OrderServiceImpl">
        <constructor-arg name="memberRepository" ref="memberRepository"/>
        <constructor-arg name="discountPolicy" ref="discountPolicy"/>
    </bean>

    <bean id="discountPolicy" class="com.devhistory.springcoreprinciple.discount.RateDiscountPolicy"/>

</beans>

 

  • XML 설정 파일에서 빈 조회
    @Test
    void xmlAppContext() {
        ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
        MemberService memberService = ac.getBean("memberService", MemberService.class);
        assertThat(memberService).isInstanceOf(MemberService.class);
    }

 

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

  • 스프링 설정 파일을 따로 관리할 필요가 없다.
    • XML 기반 설정에서는 각 분류별(컨트롤러, 비즈니스 로직)로 설정 파일을 따로 관리하는 경우도 있었다. 파일이 나뉘어져 있어 컨테이너에 등록되는 빈, 설정들을 모두 파악하는 것은 많은 어려움이있다.
    • 반면 자바 코드 기반으로 설정을 관리하면 빈, 설정들을 파악하기 용이하다.
  • XML 설정에 비해 설정의 변경이 용이하다.
    • 지금은 XML 설정에서도 IDE의 도움을 받아 비교적 편하게 설정을 할 수 있을지도 모르나, 애플리케이션을 작성하는 언어와 설정을 할때 사용하는 언어를 동일한 언어로 하는 것이 보기에 직관적이고 간편하다.
    • 그리고 의존관계도 파악하기 쉽다. XML 기반 설정에서는 단순 텍스트로 되어있어 해당 클래스가 다른 클래스와 어떤 관계를 갖는지 알 수 없다.
  • 컴파일 에러를 얻을 수 있다.
    • XML 기반으로 설정을 할 때, 빈의 이름이나 패키지명, 타입 등이 오타가 나면 발견하기 까다롭다.
    • 그러나 자바 코드로 설정을 구성하면 컴파일러가 미리 문제점을 발견해줄 수 있다.
  • 애노테이션 기반 자바 코드 설정 정보
    @Configuration
    public class AppConfig {
    
        @Bean
        public MemberService memberService() {
            return new MemberServiceImpl(memberRepository());
        }
    
        @Bean
        public OrderService orderService() {
            return new OrderServiceImpl(memberRepository(), discountPolicy());
        }
    
        @Bean
        public MemberRepository memberRepository() {
            return new MemoryMemberRepository();
        }
    
        @Bean
        public DiscountPolicy discountPolicy() {
            return new RateDiscountPolicy();
        }
    }
    • new AnnotationConfigApplicationContext(AppConfig.class) 을 통해 스프링 컨테이너에 설정정보를 등록할 수 있다.

정리

  • XML 기반의 스프링 설정 정보와 자바 코드로 된 설정 정보를 비교해보면 거의 비슷하다는 것을 알 수 있다.
  • XML 기반으로 설정하는 것은 소스 코드의 컴파일없이 설정 정보를 변경할 수 있다는 장점이 있으나, 애노테이션 기반 자바 코드 설정 사용에 비해 얻는 이점이 미약하여 최근에는 잘 사용되지 않는다.

반응형

+ Recent posts