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이나 자바 애노테이션, 자바 코드로 나타냄.
  • 설정 메타데이터는 애플리케이션을 구성하는 객체들을 나타내고 그러한 객체들 사이의 풍부한 상호 의존성을 나타냄.
Info
title참고

Image Modified

  1. 스프링 빈으로 등록할 클래스 작성(예. POJOs)
  2. 설정 메타데이터(Configuration Metadata) 작성
  3. 스프링 컨테이너(예. ApplicationContext)가 설정 메타데이터 내용을 기반으로 스프링 빈을 인스턴스화하고, 설정을 완료함
  4. 실행가능한 시스템이나 애플리케이션이 준비됨

대표적인 ApplicationContext 구현체

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

spring-web

Anchor
body_ref_02
body_ref_02
[2]

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



...

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