스프링 컨테이너의 구조
스프링 컨테이너의 특징
- 스프링 컨테이너는 다양한 형식의 설정 정보 (예. AppConfig) 를 받아들일 수 있게 유연하게 설계되어있다.
스프링 컨테이너의 구조
AnnotationConfigApplicationContext
- 자바코드를 이용한 설정 정보
GenerixXmlApplicationContext
- XML을 이용한 설정 정보
애노테이션 기반 자바 코드 설정 사용
new AnnotationConfigApplicationContext
(AppConfig.class
)AnnotationConfigApplicationContext
클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다.
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="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>
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);
}
}
스프링 빈 설정 메타 정보
BeanDefinition 이란?
- 스프링이 다양한 설정 형식을 지원할 수 있게 하는 빈 설정 메타정보이다.
- 즉, 스프링은 역할과 구현을 개념적으로 나누어 다양한 설정 형식을 지원할 수 있다.
- 스프링 컨테이너는 설정 형식이 ‘자바코드’인지, ‘XML’인지 몰라도 된다.
오직
BeanDefinition
만 알면 된다. - 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성(등록)한다.
- 본 게시글은 김영한님의 강의를 토대로 정리한 글입니다.
- 더 자세한 내용을 알고 싶으신 분들이 계신다면, 해당 강의를 수강하시는 것을 추천드립니다.