-
ApplicationContext vs BeanFactoryspring 2025. 2. 18. 15:46
스프링 빈이란?
자바빈에서 유래.자바빈은 자바에서 재 사용 가능한 객체를 말한다. 즉 스프링 빈이란 스프링에서 재 사용 가능한 객체를 말함.
⚙️ 1️⃣ BeanFactory란?
BeanFactory는 Spring IoC 컨테이너의 최소한의 핵심 인터페이스.
주요 역할은 **빈(Bean)**을 생성하고, **의존성을 주입(DI)**하며, 라이프사이클을 관리함.IoC(Inversion of Control): 제어의 역전
- 객체 생성 및 관리를 개발자가 아닌 → **Spring Container(Spring IoC Container)**가 담당
- 의존성 관리(DI): 필요한 객체를 필요한 곳에 자동 주입
🧱 주요 특징:
- Lazy Initialization(지연 초기화): 요청 시점에만 빈을 생성
- DI(Dependency Injection) 기능 제공
- BeanPostProcessor, BeanFactoryPostProcessor를 지원
🌿 2️⃣ ApplicationContext란?
ApplicationContext는 BeanFactory를 확장한 인터페이스로,스프링 애플리케이션 전반을 관리할 수 있는 컨테이너.
🔍 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 고유 기능 활성화
- AOP Proxy 생성(빈 포스트 프로세서 활용)
- ApplicationEventPublisher 등록
- Environment 인스턴스 생성 및 Profile 로드
ApplicationContext를 초기에 시작해 꼭 필요한 설정정보를 로딩하고 BeanDefinition을 통해 사용자가 설정한 정보를 로딩한다.
'spring' 카테고리의 다른 글
스프링 Gradle 동작원리 (1) 2025.02.21 Spring MVC에서 DispatcherServlet이 관리하는 Resolver의 종류와 실행 방식 (0) 2025.02.20 ApplicationContext의 EventListener 동작 원리 & ApplicationEventPublisher (0) 2025.02.18 Spring Boot 애플리케이션이 초기화되는 과정 (0) 2025.02.17