Dev/Spring

[Spring] BeanFactory와 ApplicationContext 차이점

yo0oni 2023. 9. 15. 21:52

인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다.

 


 

BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회하는 역할을 담당
  • getBean()을 제공

 

ApplicationContext

  • BeanFactory의 기능을 모두 상속받아서 제공
  • 다른 인터페이스를 상속받아 구현하여 부가 기능도 함께 제공

 

차이점

1. 부가 기능

ApplicationContext는 BeanFactory가 갖고 있지 않은 다른 인터페이스를 구현한다.

  • 메시지 소스를 활용한 국제화 기능 : 실행되는 나라에 맞춰 언어 변경
  • 환경 변수 : 로컬, 개발, 운영 등을 구분해서 처리
  • 애플리케이션 이벤트 : 이벤트 발행 및 구독 모델 지원
  • 편리한 리소스 조회 : 파일, 클래스패스, 외부 등에서 리소스 조회

 

2. 로딩 시간

BeanFactory

  • getBean() 메서드가 호출될 때까지 빈의 생성을 미룬다.
  • 지연 로딩(Lazy-Loading)을 한다.

ApplicationContext

  • 여러 개의 객체를 만들 수 있게 설정 가능하며, 빈이 필요할 때 즉시 사용될 수 있도록 한다.
  • 즉시 로딩(Eager-Loading)을 한다.

 

 

정리

  • ApplicationContext는 BeanFactory의 기능을 상속받는다.
  • ApplicationContext는 빈 관리 기능 + 편리한 부가 기능을 제공한다.
  • BeanFactory는 지연 로딩을 하고, ApplicationContext는 즉시 로딩을 한다.
  • BeanFactory나 ApplicationContext를 스프링 컨테이너라고 한다.