본문 바로가기
혼자 공부하는 것들/Spring

BeanFactory과 ApplicationContext는 왜 사용해야할까?

by applepick 2022. 1. 12.
반응형

일단 BeanFactory가 무엇인지 간략하게 설명해보겠습니다.

BeanFactory은 스프링 컨테이너의 최상위 인터페이스입니다. 또한, 스프링 빈을 관리하고 조회하는 역할을 담당하며 getBean()을 제공합니다.

https://docs.spring.io/spring-framework/docs/1.2.9/reference/beans.html

 

Chapter 3. Beans, BeanFactory and the ApplicationContext

Two of the most fundamental and important packages in Spring are the org.springframework.beans and org.springframework.context packages. Code in these packages provides the basis for Spring's Inversion of Control (alternately called Dependency Injection) f

docs.spring.io

자세한 것은 공식문서를 참고하면 좋을 것 같습니다.

 

저희가 평소에 사용하는 것은  ApplicationContext를 상속받아 사용하고 있습니다. 여기서 빈 관리를 하고 있습니다.

왜 AnnotationConfigApplicationContext는 사용하지 않는지 결론에 말씀드리겠습니다.

위에 클래스를 까다보면

위와 같이 ApplicationContext가 나옵니다. 여기서 더 까 보면

최종적으로

beanFactory를 상속받고 있습니다.

그래서 ApplicationContext 하고 BeanFactory의 차이점이 뭔데?

간단히 설명하면 ApplicationContext은 BeanFactory의 기능을 상속받아 제공합니다. 대신, BeanFactory 기능과 함께 ApplicationContext 사진을 보시면  다양한 기능들을 상속받고 있습니다. 평소에 개발하다 보면 빈 관리도 필요하고, 수많은 기능들이 필요합니다. 그것을 포함하게끔 해주는 것이 ApplicationContext입니다.

 

MessageSource = 메시지 소스를 활용한 국제화 기능 [ex) 한국-> 한국어, 영어권 -> 영어 출력]

EnvironmentCapable  = 로컬, 개발, 운영 등을 구분해서 처리 애플리케이션 이벤트

ApplicationEventPublisher = 이벤트를 발행하고 구독하는 모델을 편리하게 지원

ResourceLoader  = 편리한 리소스 조회

 

결론

일반적으로 ApplicationContext는 BeanFactory의 완전한 상위 집합이며 BeanFactory 기능 및 동작에 대한 설명은 ApplicationContext에도 적용되는 것으로 간주되어야 합니다.

 

ApplicationContext는 AnnotationConfigApplicationContext의 상위 인터페이스입니다.

그래서 ApplicationContext는 기능이 적고, AnnotationConfigApplicationContext는 너무 많은 기능을 제공합니다.

우리가 개발을 할 때는 가급적 기능을 적게 제공하는 상위 인터페이스를 사용해야, 향후 구현 클래스가 변경되어도 클라이언트 코드를 변경하지 않아도 됩니다. 그래서 실제 스프링 애플리케이션을 개발할 때는 ApplicationContext를 사용합니다.

 

반응형

댓글