Question
- BeanFactory와 ApplicationContext의 차이는?
- ApplicationContext에서 제공하는 부가 기능은?
- ApplicationContext의 구현체에는 무엇이 있는가?
- ApplicationConext에서 다양한 언어로된 구현체가 있을 수 있는 이유는?
BeanFactory와 ApplicationContext의 관계

- BeanFactory
- 스프링 컨테이너의 최상위 인터페이스다.
- 스프링 빈을 관리하고 조회하는 역할을 담당한다.
- getBean() 을 제공한다.
- 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다.
- ApplicationContext
- BeanFactory 기능을 모두 상속받아서 제공한다.
- 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 둘의 차이가 뭘까?
- 빈을 관리하고 조회하는 기능은 외 다른 여러 기능이 추가 됨.
- 따라서, BeanFactory를 직접 사용할 일은 거의 없고 ApplicationContext를 주로 사용함
- BeanFcatory, ApplicationContext를 스프링 컨테이너라 함.
ApplicationContext의 부가 기능

- 메시지소스를 활용한 국제화 기능: 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력
- 환경변수: 로컬, 개발, 운영등을 구분해서 처리
- 애플리케이션 이벤트: 이벤트를 발행하고 구독하는 모델을 편리하게 지원
- 편리한 리소스 조회: 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회
ApplicationContext의 구현체

- ApplicationContext의 구현체는 무슨 형식으로 파일을 구성하냐에 따라 달라짐
- 예를 들어, java 기반 코드 설정이면 AnnotationConfigApplicationContext가 됨
- xml 기반이면 GenericXmlApplicationContext가 됨.
- 원하면 다른 기반의 구성을 직접 구현체를 만들어서 사용해도 됨.
- 스프링에서 이렇게 여러 구현을 지원할 수 있는 방법은?
BeanDefinition

- AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성한다.
- GenericXmlApplicationContext 는 XmlBeanDefinitionReader 를 사용해서 appConfig.xml 설정 정보를 읽고 BeanDefinition 을 생성한다.
- 새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader를 만들어서 BeanDefinition 을 생성하면 된다.
- 이런식으로, 어떠한 형식이든 Reader를 통해서 다른 형식에서도 똑같이 생성되는 BeanDefinition을 생성해내면 됨.
'김영한의 스프링 핵심 원리(기본편)' 카테고리의 다른 글
| 김영한의 스프링 핵심 원리(기본편) - 스프링 빈의 라이프사이클과 생명주기 콜백(@PostConstruct, @PreDestory) (2) | 2025.02.02 |
|---|---|
| 김영한의 스프링 핵심 원리(기본편) - Bean 주입 방식과 Bean 중복 조회 문제 (2) | 2025.02.02 |
| 김영한의 스프링 핵심 원리(기본편) - @ComponentScan과 @Autowired (2) | 2025.01.31 |
| 김영한의 스프링 핵심 원리(기본편) - 스프링의 싱글톤 패턴과 @Configuration (1) | 2025.01.31 |
| 김영한의 스프링 핵심 원리(기본편) - 다형성, OCP, DI (0) | 2025.01.30 |