1. BeanFactory
- 스프링에서 제공하는 IoC 컨테이너
- 스프링 컨테이너의 최상위 인터페이스이다.
- 스프링빈을 관리, 조회한다.
- getBean()을 제공한다
2. ApplicationContext
- BeanFactory기능을 모두 상속받아서 제공
- 빈을 관리하고 검색하는 기능 외에 수 많은 부가기능을 제공한다.

- 메시지소스를 활용한 국제화 기능 -> ex) 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력
- 환경변수 -> 로컬,개발,운영등을 구분해서 처리
- 애플리케이션 이벤트 -> 이벤트를 발행하고 구독하는 모델을 편리하게 지원
- 편리한 리소스 조회 -> 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회
빈 요청시 처리 과정
클라이언트에서 bean을 요청하면 ApplicationContext는 다음과 같은 과정을 거쳐 bean을 반환한다.
- ApplicationContext는 @Configuration이 붙은 클래스들을 설정 정보로 등록해두고, @Bean이 붙은 메소드의 이름으로 빈 목록을 생성한다.
- 클라이언트가 해당 bean을 요청한다.
- ApplicationContext는 자신의 bean 목록에서 요청한 이름이 있는지 찾는다.
- ApplicationContext는 설정 클래스로부터 bean 생성을 요청하고, 생성된 bean을 돌려준다.

ApplicationContext의 장점
- 클라이언트는 @Configuration이 붙은 구체적인 팩토리 클래스를 알 필요가 없다.
- ApplicationContext는 종합 IoC 서비스를 제공한다.
- ApplicationContext는 객체의 생성과 관계설정 외에, 객체가 만들어지는 방식과 시점 및 전략등을 다르게 설정할 수 있고 후처리나 정보의 조합 인터셉트 등과 같은 다양한 기능을 제공한다.
- ApplicationContext를 통해 다양한 빈 검색 방법을 제공할 수 있다.
3. BeanDefinition - 스프링 빈 설정 메타 정보
스프링이 이렇게 다양한 설정 형식을 지원할 수 있는 데엔 'BeanDefinition'이라는 추상화가 있다.

- @Bean(AppConfig.class), <bean>(appConfig.xml)당 각각 하나의 메타 정보가 생성된다.
- 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.

- 'AnnotationConfigApplicationContext'는 'AnnotatedBeanDefinitionReader'를 사용해서 'AppConfig.class'를 읽고 'BeanDefinition'을 생성한다.
출저
인프런 강의 스프링 핵심 원리 - 기본편 (김영한 강사님)
'Spring' 카테고리의 다른 글
[Spring] MVC 패턴 & 프론트 컨트롤러(Dispatcher-Servlet) (0) | 2023.01.29 |
---|---|
[Spring] 컴포넌트 스캔과 의존관계 자동 주입(생성자 주입을 해야하는 이유) (0) | 2023.01.29 |
[Spring] 싱글톤 컨테이너 (0) | 2023.01.29 |
[Spring] IoC, DI, 그리고 컨테이너 (0) | 2023.01.29 |
[Spring] 객체지향 설계의 5가지 원칙(SOLID) (0) | 2023.01.29 |