spring

ApplicationContext vs BeanFactory

Lee_SJ 2025. 2. 18. 15:46

스프링 빈이란?

자바빈에서 유래.자바빈은 자바에서 재 사용 가능한 객체를 말한다. 즉 스프링 빈이란 스프링에서 재 사용 가능한 객체를 말함.

 

⚙️ 1️⃣ BeanFactory란?

BeanFactorySpring IoC 컨테이너의 최소한의 핵심 인터페이스.
주요 역할은 **빈(Bean)**을 생성하고, **의존성을 주입(DI)**하며, 라이프사이클을 관리함.

IoC(Inversion of Control): 제어의 역전
  • 객체 생성 및 관리개발자가 아닌 → **Spring Container(Spring IoC Container)**가 담당
  • 의존성 관리(DI): 필요한 객체필요한 곳에 자동 주입

 

🧱 주요 특징:

  • Lazy Initialization(지연 초기화): 요청 시점에만 빈을 생성
  • DI(Dependency Injection) 기능 제공
  • BeanPostProcessor, BeanFactoryPostProcessor를 지원

🌿 2️⃣ ApplicationContext란?

ApplicationContextBeanFactory를 확장한 인터페이스로,스프링 애플리케이션 전반을 관리할 수 있는 컨테이너.

 

🔍 ApplicationContext는 뭐가 다를까?

🔍 1️⃣ 핵심 정의:

구분 BeanFactory ApplicationContext
정의 Spring의 최상위 컨테이너 인터페이스 BeanFactory를 확장한 고급 컨테이너
역할 빈 생성, 의존성 주입(DI) 필수 기능 제공 BeanFactory 기능 + 부가 기능(AOP, 이벤트 관리, 메시지 소스)
주요 구현체 DefaultListableBeanFactory AnnotationConfigApplicationContext, XmlApplicationContext
초기화 시점 Lazy Initialization (필요 시 생성) Eager Initialization (애플리케이션 시작 시 생성)
주요 메서드 getBean(), containsBean(), isSingleton() BeanFactory 메서드 상속 + publishEvent(), getEnvironment()
사용 주체 로우레벨 개발(라이브러리 내부에서 주로 사용) 일반적인 Spring 애플리케이션 개발 시 사용

 

일단 @SpringBootApplication 시작후

🛠️ STEP 1: ApplicationContext 생성
  • 클래스: AnnotationConfigApplicationContext
  • 역할: BeanFactory 생성 및 등록
  • 메모리: Metaspace → ApplicationContext 및 BeanDefinition 정보 저장
🛠️ STEP 2: BeanDefinition 등록(BeanFactory 단계)
  • BeanDefinitionMap 생성:
    • 자료구조: ConcurrentHashMap<String, BeanDefinition>
    • Key: BeanName
    • Value: BeanDefinition 객체(클래스, 생성자 정보, 의존성 정보 포함)
🛠️ STEP 3: Bean 의존성 주입(DI)
  • DFS 기반 의존성 탐색(스택 사용)
  • @Autowired, @Inject 애노테이션 인식
🛠️ STEP 4: ApplicationContext 고유 기능 활성화
  1. AOP Proxy 생성(빈 포스트 프로세서 활용)
  2. ApplicationEventPublisher 등록
  3. Environment 인스턴스 생성 및 Profile 로드

 

ApplicationContext를 초기에 시작해 꼭 필요한 설정정보를 로딩하고 BeanDefinition을 통해 사용자가 설정한 정보를 로딩한다.