스프링 컨테이너: BeanFactory와 ApplicationContext 비교

청포도봉봉이·2024년 8월 22일
1

Spring

목록 보기
35/35
post-thumbnail

스프링 컨테이너: BeanFactory와 ApplicationContext 비교

스프링 프레임워크의 핵심 기능 중 하나는 의존성 주입(Dependency Injection, DI)을 통한 객체 관리입니다. 이러한 기능을 제공하는 것이 바로 스프링 컨테이너입니다. 오늘은 스프링 컨테이너의 두 가지 주요 구현체인 BeanFactory와 ApplicationContext에 대해 알아보겠습니다.

BeanFactory

BeanFactory는 스프링 컨테이너의 최상위 인터페이스입니다. 이는 스프링의 IoC(Inversion of Control) 컨테이너의 기본적인 기능을 정의합니다.

주요 특징:

  1. 빈 생성 및 관리: BeanFactory는 빈의 정의를 읽고, 빈을 생성하고 관리합니다.
  2. 지연 로딩(Lazy Loading): BeanFactory는 빈이 요청될 때까지 인스턴스화를 지연시킵니다.
  3. 의존성 주입: 빈 사이의 의존관계를 자동으로 설정합니다.

사용 예:

Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
MyBean bean = (MyBean) factory.getBean("myBean");

ApplicationContext

ApplicationContext는 BeanFactory를 확장한 인터페이스입니다. BeanFactory의 모든 기능을 포함하면서도 더 많은 엔터프라이즈 특화 기능을 제공합니다.

주요 특징:

  1. 모든 BeanFactory 기능: BeanFactory의 모든 기능을 상속받아 제공합니다.
  2. 즉시 로딩(Eager Loading): 기본적으로 모든 싱글톤 빈을 시작 시점에 미리 로드합니다.
  3. AOP 지원: 관점 지향 프로그래밍을 쉽게 통합할 수 있습니다.
  4. 국제화(i18n) 지원: 다국어 지원을 위한 기능을 제공합니다.
  5. 이벤트 발행: 빈 생명주기 이벤트나 커스텀 이벤트를 발행하고 처리할 수 있습니다.
  6. 다양한 설정 방식: XML, 자바 코드, 애노테이션 등 다양한 방식으로 빈을 정의하고 구성할 수 있습니다.

사용 예:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean bean = context.getBean("myBean", MyBean.class);

BeanFactory vs ApplicationContext

  1. 기능: ApplicationContext는 BeanFactory의 모든 기능 + 추가 기능을 제공합니다.
  2. 로딩 방식: BeanFactory는 지연 로딩, ApplicationContext는 즉시 로딩을 사용합니다.
  3. 사용 환경:
    • BeanFactory: 메모리가 중요한 경우 (예: 모바일 기기)
    • ApplicationContext: 대부분의 애플리케이션에서 권장됨

결론

일반적으로 ApplicationContext를 사용하는 것이 권장됩니다. ApplicationContext는 더 많은 기능을 제공하며, 대부분의 애플리케이션에서 그 장점이 단점을 상쇄합니다. 그러나 특수한 경우(예: 제한된 리소스 환경)에는 BeanFactory를 고려해볼 수 있습니다.

profile
서버 백엔드 개발자

0개의 댓글