getBean()
을 제공한다.AnnotationConfigApplicationContext
도 그런 구현체 중 하나.new AnnotationConfigApplicationContext(AppConfig.class)
AnnotationConfigApplicationContext
클래스를 사용하면서 자바 코드로 된 설정 정보를 넘기면 된다.GenericXmlApplicationContext
를 사용하면서 xml
설정 파일을 넘기면 된다.public class XmlAppContextTest {
@Test
void xmlAppContext() {
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberService", MemberService.class);
assertThat(memberService).isInstanceOf(MemberService.class);
}
}
<?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.service.MemberServiceImpl" >
<constructor-arg name="memberRepository" ref="memberRepository"/>
</bean>
<bean id="memberRepository" class="hello.core.member.repository.MemoryMemberRepository"/>
<bean id="orderService" class="hello.core.order.service.OrderServiceImpl" >
<constructor-arg name="memberRepository" ref="memberRepository"/>
<constructor-arg name="discountPolicy" ref="discountPolicy"/>
</bean>
<bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy"/>
</beans>
스프링이 이렇게나 유연합니다.
BeanDefinition
이라는 추상화가 있다.BeanDefinition
을 빈 설정 메타정보라 한다.@Bean
, <bean>
강 각각 하나씩 메타 정보가 생성된다.코드레벨로 조금 더 깊이있게 들어가보자.
AnnotationConfigApplicationContext
는 AnnotationBeanDefinitionReader
를 사용해서 AppConfig.class
를 읽고 BeanDefinition
을 생성한다.GenericXmlApplicationContext
는 XmlBeanDefinitionReader
를 사용해서 appConfig.xml
설정 정보를 읽고 BeanDefinition
을 생성한다.BeanDefinition
을 생성하면 된다.