본문 바로가기
개발자 공부 - 인프런 온라인 강의/스프링 핵심 원리 - 기본편

[섹션 4. 스프링 컨테이너와 스프링 빈] BeanFactory와 ApplicationContext (+ 스프링 컨테이너의 계층구조) / 인프런 김영한 스프링 핵심 원리 기본편

by easpop 2023. 4. 1.
728x90
반응형

이번 시간에는 BeanFactory와 ApplicationContext에 대해서 알아보는 시간을 가졌다.

 

스프링 컨테이너의 계층구조를 살펴보면, 최상위에는 BeanFactory 인터페이스가 있다.

그 아래에는 BeanFactory를 상속받은 ApplicationContext 인터페이스가 있다.

그 아래에는 ApplicationContext를 상속받은 AnnotationConfigApplicationContext 구현 클래스가 있다.

 

스프링 컨테이너의 계층구조를 하나씩 살펴보자.

BeanFactory는 스프링 빈을 관리하고 조회하는 역할을 담당하고, getBean()을 통해서 빈을 조회할 수 있다.

지금까지의 강의에서 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다.

반응형

그 다음은 BeanFactory를 상속받은 ApplicationContext 인터페이스가 있다.

Ctrl + N으로 모든 클래스를 검색 가능한데, ApplicationContext 클래스를 들어가보면 ApplicationContext가 제공하는

기능들을 확인할 수 있고, 여러가지 클래스를 extends 하고 있는 것을 볼 수 있다.

애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 여러 다른 기능들이 필요하다.

그렇기 때문에 ApplicationContext는 다른 부가 기능들을 제공해준다.

 

위의 사진에서 상속받은 클래스를 볼 수 있듯이, MessageSource 클래스는 국제화 기능을 제공한다.

예를 들어, 웹사이트에서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력을 해준다.

 

환경 변수는 로컬 환경, 테스트 서버를 구축하고 있는 개발 환경, 실제 운영중인 운영 환경,

크게 3가지가 있는데, 이를 구분해서 처리해준다.

각 환경별로 어떤 DB에 연결을 해야 될지, 예를 들면, 개발이면 개발 DB에 연결하고, 운영이면 운영 DB에 연결을 해준다.

 

애플리케이션 이벤트는, 이벤트를 발행하고 구독하는 모델을 편리하게 지원해준다.

리소스 로더는, 파일, 클래스패스, 외부 URL 등에서 리소스를 읽어들여서 내부에서 사용할 때,

추상화하여 편리하게 조회를 하게 해준다.

 

이렇게 ApplicationContext는 빈 관리 기능에다가 추가 편리한 부가 기능을 제공한다.

BeanFactory를 직접 사용할 일은 거의 없고, 부가 기능이 포함된 ApplicationContext를 사용한다.

BeanFactory나 ApplicationContext 둘 다 스프링 컨테이너라고 얘기한다.

 

그리고 마지막으로 AnnotationConfigApplicationContext은 ApplicationContext를 상속받은 구현 클래스이다~~

 

 

728x90
반응형

댓글