ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ApplicationContext vs BeanFactory
    spring 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을 통해 사용자가 설정한 정보를 로딩한다.

Designed by Tistory.