[Spring] BeanFactory와 ApplicationContext

2025. 7. 17. 18:17·Back end/Spring Project
반응형

스프링에서 빈(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
'Back end/Spring Project' 카테고리의 다른 글
  • [Spring] JPA 기본 CRUD 동작 예제
  • [Spring] Maven profile 이용한 환경별 (local, dev, prod) 빌드 및 설정 분리
  • [Spring] AnnotationConfigApplicationContext로 알아보는 스프링 컨테이너 생성 과정
  • [Spring Project] 겨울을 지나 봄으로: 스프링의 등장 배경과 개념
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (258)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (73)
        • Spring Project (28)
        • Java (23)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (24)
        • IntelliJ (2)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (8)
      • Database (17)
        • Oracle (11)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git
    BOJ
    구현
    배열
    github
    단계별풀기
    java
    jpa
    오라클
    1차원 배열
    spring
    for문
    solved.ac
    문자열
    백준알고리즘
    springboot
    백준 자바
    알고리즘
    Oracle
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[Spring] BeanFactory와 ApplicationContext
상단으로

티스토리툴바