Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

스프링 IoC 컨테이너

  • 의존성 주입(DI)를 이용하여 애플리케이션을 구성하는 컴포넌트를 관리함.
  • 협력하는 컴포넌트 간의 연관관계를 형성함.
  • org.springframework.beans와 org.springframework.context 패키지는 스프링 프레임워크 IoC 컨테이너의 기반임.

Tip
title참고
  • IoC / DI와 관련해서는 이곳을 참고할 것

애플리케이션 컨텍스트(ApplicationContext)

  • org.springframework.context.ApplicationContext 인터페이스
  • BeanFactory의 서브 인터페이스임.
  • 더 쉬운 통합을 제공함.
    • 스프링의 AOP 기능
    • 국제화(i18n, internationalization)를 위한 메시지 리소스 핸들링
    • 이벤트 발행(event publication)
    • 애플리케이션 레이어 특정 컨텍스트(예. 웹 애플리케이션을 위해 WebApplicationContext 사용)

빈 팩토리(BeanFactory)

BeanFactory or ApplicationContext?

  • 특별한 이유가 없는 한 애플리케이션 컨텍스트를 사용할 것을 권장함.
    Anchor
    body_ref_01
    body_ref_01
    [1]
기능BeanFactoryApplicationContext
빈 인스턴스화/와이어링YesYes
자동 BeanPostProcessor 등록NoYes
자동 BeanFactoryPostProcessor 등록NoYes
편리한 MessageSource 접근(i18n을 위한)NoYes
ApplicationEvent 발행(publication)NoYes

ApplicationContext

  • org.springframework.context.ApplicationContext 인터페이스는 스프링 IoC 컨테이너를 나타내며, 빈(스프링 빈)을 인스턴스화하고, 설정하고, 조합하는 데 책임이 있음.
  • 컨테이너는 어떤 객체를 인스턴스로 만들고 설정하고 조합해야 하는지를 설정 메타데이터에서 알아냄.
  • 설정 메타데이터는 XML이나 자바 애노테이션, 자바 코드로 나타냄.
  • 설정 메타데이터는 애플리케이션을 구성하는 객체들을 나타내고 그러한 객체들 사이의 풍부한 상호 의존성을 나타냄.

...

클래스모듈버전설명
AnnotationConfigApplicationContextspring-context3.0하나 이상의 자바 기반 설정 클래스에서 스프링 애플리케이션 컨텍스트를 로드함.
AnnotationConfigWebApplicationContextspring-web3.0하나 이상의 자바 기반 설정 클래스에서 스프링 웹 애플리케이션 컨텍스트를 로드함.
ClassPathXmlApplicationContextspring-context1.0클래스패스(classpath)에 위치한 XML 파일에서 컨텍스트 정의 내용을 로드함.
FileSystemXmlApplicationContextspring-context1.0파일 시스템에서, 즉 파일 경로로 지정된 XML 파일에서 컨텍스트 정의 내용을 로드함.
XmlWebApplicationContext

spring-web

Anchor
body_ref_0102
body_ref_0102
[12]

1.0웹 애플리케이션에 포함된 XML 파일에서 컨텍스트 정의 내용을 로드함.

...

Anchor
comment_01
comment_01
[1^ http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#context-introduction-ctx-vs-beanfactory

Anchor
comment_02
comment_02
[2] ^ 스프링 프레임워크 1.0부터 존재했으며, 스프링 프레임워크 3.0에서 spring-web 모듈로 분리되었음. 여기를 참조할 것.