0. 개요
- ApplicationContext(= Spring Contianer)는 다양한 형태로 구현이 가능하다.
- 이는 ApplicationContext(= Spring Contianer)가 인터페이스이기 때문이다.
- 이번 포스팅에서는 ApplicationContext의 다형성에 대해서 알아보자.
1. BeanFactory
- BeanFactory는 ApplicationContext의 상위 개념이다.
- ApplicationContext는 인터페이스고, BeanFactory라는 인터페이스를 상속받는다.
- 그렇다면 BeanFactory는 무엇일까?
a) Spring Container의 최상위 개념
- BeanFactory는 Spring Container의 최상위 개념이다.
- BeanFacotry는 Bean을 관리하고 조회하는 간단한 기능을 제공하는 인터페이스다.
- 그렇다면 이를 상속받은 ApplicationContext는 어떤 기능을 수행할까?
2. ApplicationContext
- 우선, ApplicationContext가 상속받는 인터페이스를 확인해보자.
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {}
- 위의 코드는 ApplicationContext가 어떤 인터페이스를 상속받는지 보여준다.
- ApplicationContext는 BeanFactory를 직접 상속받는 것이 아니라, Bean Factory를 상속받은 다른 상위개념을 상속받는다.
public interface HierarchicalBeanFactory extends BeanFactory {}
public interface ListableBeanFactory extends BeanFactory {}
- ApplicationContext가 상속받는 인터페이스 중 위의 코드에 나온 인터페이스가 BeanFactory를 상속받고 있다.
- 그렇다면 이렇게 상속받은 인터페이스는 다음과 같은 기능을 수행한다.
a) ApplicationContext의 기능
→ MessageSource: 국제화 기능, 접속환경에 따른 언어지원
→ EnvironmentCapable: 환경변수, 로컬/개발(test)/운영(production)등 개발환경에 따른 프로젝트 환경설정
ex) 개발 환경에 따라 다른 DB를 연결해주는 기능
→ ApplicationEventPublisher: 어플리케이션 내부의 이벤트 발행 및 처리 기능
→ ResourceLoader: 파일, class path, 외부 등에서 리소스를 편하게 조회할 수 있는 기능
→ BeanFactory: Bean 관리 및 조회
3. 다양한 Spring Container 생성이 가능한 이유
a) Bean Container
- Spring Container의 기능 중 Bean 관리를 수행하는 부분을 Bean Container라고 한다.
- Bean Container가 제공하는 XML, Annotation, Groovy 등의 설정 환경은 Bean Defitnition을 통해 구현된다.
b) Bean Definition
- Bean Container가 제공하는 설정 형식을 Bean Definition이라고 한다.
- 'Bean 설정 메타정보' 라고 불리는데, 이는 인터페이스로 다형성을 통해 구현된다.
- 하나의 Bean이 등록될 때마다 'Bean 설정 메타정보'가 생성되는데,
Spring Container는 이 Bean Definition을 기반으로 Spring Bean을 생성하게 된다.
c) BeanDefinitionReader
- 설정파일을 등록할 때, Bean Definition의 구현체를 선택 및 생성하게 된다.
ex) ApplictaionContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
- 이때 Bean Definition의 구현체 내부에 존재하는 BeanDefinitionReader가 설정파일의 형식을 인식한다.
- BeanDefinitionReader는 설정파일을 읽고, 등록된 각 Bean의 Bean Definition을 형식에 맞춰 생성한다.
- 그리고 Spring Container는 이렇게 생성된 Bean Definition을 이용하여 Spring Bean을 등록한다.
- BeanDefinitionReader의 구성은 다음과 같이 이루어진다고 이해하면 된다.
'Back-end > Spring 개념' 카테고리의 다른 글
8. Bean 자동 등록 (0) | 2022.02.07 |
---|---|
7. Singleton Container (0) | 2022.02.02 |
5. Spring Container (0) | 2022.01.31 |
4. Spring을 사용하는 이유 (1) | 2022.01.27 |
3. SOLID 원칙 (0) | 2022.01.26 |
댓글