[개념] BeanFactory와 ApplicationContext

2023. 2. 19. 16:54· Info/개념 정리
목차
  1. 들어가기 앞서..
  2. BeanFactory
  3. ApplicationContext
  4. ApplicationContext 사용을 권장하는 이유는?
  5. 정리
728x90

 

들어가기 앞서..

우선 간단하게 BeanFactory와 ApplicationContext를 정리하고 자세히 살펴보겠다.

  • BeanFactory : BeanFactory란 빈을 생성하고 의존관계를 설정하는 기능을 담당하는 가장 기본적인 IoC 컨테이너이자 클래스를 말한다.
  • ApplicationContext : ApplicationContext는 BeanFactory를 구현하고 있는 확장 버전이라고 보면 쉽다.

 

 


 

 

BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회하는 역할을 담당
  • getBean() 메소드를 제공
  • 빈과 관련된 대부분의 기능을 제공
  • Lazy-loading 방식
    • 빈을 사용할 때 빈을 로딩하는데, 필요할 때만 로딩하기에 가벼운 경량 컨테이너이다.

 

ApplicationContext

  • BeanFactory 기능을 모두 상속받아 제공
  • Eager-loading
    • 런타임 실행시 모든 빈을 미리 로딩
  • 빈을 관리하고 검색하는 기능 BeanFactory + 부가기능

  • MessageSource - 메시지를 활용한 국제화 기능
    • 한국에서는 한국어, 영어권에서는 영어로 출력
  • EnvironmentCapable - 환경변수
    • 로컬, 개발, 운영 등을 구분해서 처리
  • ApplicationEventPublisher - 애플리케이션 이벤트
    • 이벤트를 발행하고 구독하는 모델을 편리하게 지원
  • ResourceLoader - 편리한 리소스 조회
    • 파일, class path, 외부 등에서 리소스를 편리하게 조회

 

 

ApplicationContext 사용을 권장하는 이유는?

JPA에서는 Eager Loading을 지양하고 Lazy Loading을 사용하라고 배웠었다. 그렇다면 스프링 공식문서에서는 어째서 Bean의 Eager Loading을 사용하는 ApplicationContext 사용을 권장할까?

문제가 있는 Bean 객체가 있을 때, Lazy Loading을 사용하게 되면 해당 Bean이 사용되는 시점이 되기 전까지 해당 오류의 유무를 파악하기가 어렵다. 때문에 Eager Loading을 사용하여, 객체의 초기화 시점에 오류를 잡아내기 위함이라고 생각한다.

 

 


 

정리

ApplicationContext는 BeanFactory의 기능을 상속받고, ApplicationContext는 빈 관리기능 + 편리한 부가 기능을 제공한다. BeanFactory를 직접 사용할 일은 거의 없고 부가기능이 포함된 ApplicationContext를 사용한다. BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다.

 


 

 

참고:
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#context-introduction-ctx-vs-beanfactory
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html
https://beststar-1.tistory.com/39#%EC%8A%A4%ED%94%84%EB%A7%81_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88(Spring_Container)
https://velog.io/@saint6839/BeanFactory-%EC%99%80-ApplicationContext%EC%9D%98-%EC%B0%A8%EC%9D%B4

728x90
저작자표시 (새창열림)
  1. 들어가기 앞서..
  2. BeanFactory
  3. ApplicationContext
  4. ApplicationContext 사용을 권장하는 이유는?
  5. 정리
'Info/개념 정리' 카테고리의 다른 글
  • [개념] RefreshToken 정리
  • [개념] 빌더-패턴(Builder-Pattern) 은 왜 사용해야 하는가?
  • [개념] 객체 지향 설계의 5가지 원칙 (SOLID 원칙)
  • [개념] CORS(Cross-Origin Resource Sharing) 란 무엇인가?
soohykeee
soohykeee
Computer Science. 2017~2023 / Java, Spring, Backend
soohykeee
Coding_
soohykeee
전체
오늘
어제
  • 분류 전체보기
    • 회고
    • Info
      • 개념 정리
      • 정보
    • Study
      • Pet-Clinic-Project
      • Concept
    • Inflearn
      • 스프링 핵심 원리_기본편
      • Git
    • 코드로 배우는 스프링 부트 웹 프로젝트
      • Guestbook
      • MovieReview
      • Security & API

블로그 메뉴

  • 홈
  • 방명록
  • Github

인기 글

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
soohykeee
[개념] BeanFactory와 ApplicationContext
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.