본문 바로가기
Back-end/Spring 개념

6. Spring Container의 다형성

by devraphy 2022. 2. 1.

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

댓글