반응형
스프링에서 빈(Bean)을 관리하는 핵심 컴포넌트는 스프링 컨테이너입니다.
그중에서도 가장 중요한 인터페이스가 바로 BeanFactory와 ApplicationContext인데요,
이 둘의 차이를 제대로 이해하면 스프링의 동작 원리를 더 쉽게 파악할 수 있습니다.
📌 스프링 컨테이너의 구조
BeanFactory
↑
ApplicationContext
↑
AnnotationConfigApplicationContext
- BeanFactory: 가장 기본적인 스프링 컨테이너의 최상위 인터페이스
- ApplicationContext: BeanFactory를 상속하여 확장한 인터페이스
- AnnotationConfigApplicationContext: 자바 기반 설정(@Configuration)을 지원하는 실제 구현체
1️⃣ BeanFactory란?
스프링 컨테이너의 기본 기능을 제공하는 가장 단순한 형태의 인터페이스입니다.

✅ 주요 기능
- 빈을 생성과 의존성 주입
- getBean()을 통해 빈을 조회할 수 있음
2️⃣ ApplicationContext란?

BeanFactory의 기능을 포함하면서 더 많은 부가기능을 제공하는 고급 컨테이너입니다.
실제 스프링 애플리케이션에서는 대부분 ApplicationContext를 사용합니다.
✅ ApplicationContext의 부가기능
| 기능 | 설명 |
| 국제화(MessageSource) | 다국어 메시지 처리 지원 (한국어, 영어 등) |
| 환경설정(Environment) | 로컬/개발/운영 환경 분리 및 프로파일 관리 |
| 이벤트 처리 | 이벤트 발행 및 리스너 등록 |
| 리소스 로딩(ResourceLoader) | 파일, 클래스패스, URL 등의 자원 조회 지원 |
✅ 코드 예시 (Annotation 기반)
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class ApplicationContextExample {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = context.getBean(MyService.class);
myService.doSomething();
}
}
// AppConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
// MyService.java
public class MyService {
public void doSomething() {
System.out.println("Hello, Spring!");
}
}
📌 결론
- BeanFactory와ApplicationContext모두 스프링 컨테이너라고 부릅니다.
- 스프링 부트나 스프링 프레임워크에서 우리가 사용하는 대부분의 컨테이너는 ApplicationContext 기반입니다.
📚 결국, ApplicationContext는 BeanFactory의 상위 호환이라고 볼 수 있습니다.
반응형
'Back end > Spring Project' 카테고리의 다른 글
| [Spring] JPA 기본 CRUD 동작 예제 (0) | 2025.08.13 |
|---|---|
| [Spring] Maven profile 이용한 환경별 (local, dev, prod) 빌드 및 설정 분리 (0) | 2025.07.23 |
| [Spring] AnnotationConfigApplicationContext로 알아보는 스프링 컨테이너 생성 과정 (0) | 2025.07.15 |
| [Spring Project] 겨울을 지나 봄으로: 스프링의 등장 배경과 개념 (0) | 2025.05.12 |
| [Spring Project] 반복되는 로직? AOP로 한 방에 해결하기 (예제 포함) (0) | 2025.05.08 |