1. 스프링 컨테이너 (ApplicationContext) 생성 과정
ApplicationContext ac =
new AnnotationConfigApplicationContext(AppConfig.class);
1. AppConfig라는 클래스에 @Configuration 어노테이션이 붙어있다면, 이를 통해서 스프링 컨테이너를 생성할 수 있다.
2. 생성이 된 이후, AppConfig 내의 @Bean 어노테이션이 있는 빈들을 등록한다.
3. 스프링컨테이너가 빈 사이의 설정관계를 기초로하여 의존관계를 부여한다.
스프링은
- 빈 생성과, 빈 의존관계 주입의 단계가 나눠져있다.
- 먼저 빈 생성을 다 한뒤,
- 의존관계를 주입한다.
자바코드는
- 인스턴스를 생성하면 그 인스턴스 생성 함수 블록을 한번에 처리하기 때문에
- 인스턴스 생성과, 의존관계 주입을 한번에 한다.
2. 빈 조회
- ac.getBean("빈 이름", 타입.class)
- 없다면, NoSuchBeanDefinitionException.class 발생
- 동일한 타입이 두 개 이상이라면 NoUniqueBeanDefinitionException.class 발생
- 빈 이름을 지정하도록 하자.
- ac.geteBeans(타입.class)
- 해당 타입의 모든 빈들을 조회한다.
상속관계가 있다면?
- 자식 타입도 함께 조회된다.
- 따라서 Object 타입으로 조회하면, 모든 스프링 빈을 조회한다.
- .class 타입 기반 instanceOf를 써서 그러는 듯?
3. BeanFactory 와 ApplicationContext
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스이다.
- 스프링 빈을 관리하고, 조회하는 역할을 담당
- getBean()
ApplicationContext
- BeanFactory 의 기능을 모두 상속받아 사용한다.
- BeanFactory 와의 차이는?
- + 부가기능
public interface ApplicationContext extends EnvironmentCapable,
ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
- MessageSource
- 국제화 기능
- EnvironmenCapable
- 로컬 / 개발 / 운영 등을 구분해서 환경 변수를 처리
- ApplicationEventPublisher
- 이벤트를 발행하고, 구독하는 모델을 편리하게 지원
- ResourceLoader
- 파일, 클래스패스, 외부 등에서 리소스를 편하게 조회할 수 있도록 함
BeanFactory / ApplicationContext = 스프링 컨테이너
4. 스프링 빈 설정 메타 정보 - BeanDefinition
스프링은 어떻게 다양한 형식 (Xml, Java) 으로 빈을 등록하도록 하는 것인가?
- BeanDefinition : 빈 설정 메타정보라 한다.
스프링 컨테이너는 BeanDefinition 추상화에 의존한다.
- BeanDefinition 내에 빈 등록은 ApplicationContext 의 구현체 (Annotation, GenericXmlApplicationContext) 내부에서 진행된다.
- 해당 구현체 내부에 (...BeanDefinitionReader) 가 존재한다.
'강의 정리 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
7. 빈 스코프 (0) | 2020.12.24 |
---|---|
6. 빈 생명주기 콜백 (0) | 2020.12.23 |
4. 컴포넌트 스캔 (0) | 2020.12.17 |
3. 싱글톤 컨테이너 (0) | 2020.12.15 |
1. 객체지향 설계와 스프링 (0) | 2020.12.12 |