- 해당 게시물은 인프런 "스프링 핵심 원리 - 기본편" 강의를 참고하여 작성한 글입니다.
- 자세한 코드 및 내용은 강의를 참고해 주시길 바랍니다.
강의링크 -> 스프링 핵심 원리 - 기본편 (김영한)
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
ApplicationContext
: 스프링 컨테이너 인터페이스
AnnotationConfigApplicationContext
: ApplicationContext 인터페이스의 구현체
AppConfig.class
: 구성 정보
스프링 컨테이너는 파라미터로 넘어온 구성 정보를 사용해서 스프링 빈을 등록
스프링 컨테이너는 구성 정보를 참고해서 의존관계를 주입(DI)
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
Object bean = ac.getBean(beanDefinitionName);
System.out.println("beanDefinitionName = " + beanDefinitionName + ", object = " + bean);
}
}
ac.getBeanDefinitionNames()
: 스프링에 등록된 모든 빈 이름을 조회
ac.getBean()
: 빈 이름으로 빈 객체를 조회
ac.getBean(빈이름, 타입)
: 스프링 빈을 찾는 가장 기본적인 조회 방법
ac.getBeansOfType()
: 해당 타입의 모든 빈 조회
Object
타입으로 조회하면, 모든 스프링 빈을 조회getBean()
제공BeanFactory
기능을 모두 상속받아 제공BeanFactory
의 기능 외 수 많은 부가 기능 제공스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있도록 유연하게 설계되어 있다.
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
...
<bean id="memberService" class="hello.core.member.MemberServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository" />
</bean>
...
xml 기반의 appConfig.xml 스프링 설정 정보와 자바 코드 기반의 AppConfig.java 설정 정보를 비교해보면 거의 비슷하다.
스프링은 BeanDefinition
이라는 추상화를 이용해 이런 다양한 설정 형식을 지원한다.
AnnotationConfigApplicationContext
는 AnnotatedBeanDefinitionReader
를 사용해서 AppConfig.class
를 읽고 BeanDefinition
을 생성한다.GenericXmlApplicationContext
는 XmlBeanDefinitionReader
를 사용해서 appConfig.xml
설정 정보를 읽고 BeanDefinition
을 생성한다.XxxBeanDefinitionReader
를 만들어서 BeanDefinition
을 생성하면 된다.