[Spring] IoC 컨테이너

·2024년 7월 17일
0

Spring

목록 보기
2/4
post-thumbnail

제어의 역전(IoC, Inversion of Control)은 객체의 생성과 생명주기 관리를 개발자가 아닌 프레임워크가 담당하는 디자인 패턴이다.

스프링 IoC 컨테이너

스프링의 IoC 컨테이너는 스프링 프레임워크의 핵심 기능 중 하나이다. 이 컨테이너는 애플리케이션의 객체들을 생성하고, 구성하며, 관리하는 역할을 한다.

  1. 빈(Bean) 관리
    • 컨테이너는 빈이라고 불리는 객체들을 생성하고 관리
    • 빈은 애플리케이션의 핵심 구성 요소이며, 스프링에 의해 관리되는 객체
  2. 의존성 주입(Dependency Injection)
    • 객체 간의 의존성을 외부에서 주입함으로써 결합도를 낮춤
    • 생성자 주입, 세터 주입, 필드 주입 등의 방식을 지원
  3. 생명주기 관리
    • 빈의 초기화와 소멸 과정을 관리
    • @PostConstruct, @PreDestroy 어노테이션이나 초기화/소멸 메소드를 통해 제어
  4. 스코프 관리
    • 싱글톤, 프로토타입, 리퀘스트, 세션 등 다양한 스코프의 빈을 관리
  5. AOP 지원
    • 횡단 관심사를 쉽게 모듈화
  6. 이벤트 처리
    • 애플리케이션 내에서 이벤트를 발행하고 구독할 수 있는 기능을 제공

BeanFactory와 ApplicationContext

보통 ApplicationContext를 스프링 컨테이너라고 한다.

  • BeanFactory
    • 스프링의 DI 컨테이너의 실제 구현체를 위한 루트 인터페이스
    • 팩토리 디자인 패턴의 구현체로, 객체의 생성과 구성을 분리
    • 빈 정의를 읽고, 빈을 구성하고 제공
  • ApplicationContext
    • BeanFactory 의 모든 기능을 포함하고, 추가 기능을 제공
    • MessageSource 인터페이스를 통해 국제화 메시지에 접근
      • 예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력
    • URL 및 파일과 같은 리소스에 ResourceLoader 인터페이스를 통해 접근
    • ApplicationEventPublisher 인터페이스를 사용하여 ApplicationListener 인터페이스를 구현하는 빈에게 이벤트를 발생

특별한 이유가 없다면 ApplicationContext를 사용하도록 한다.

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

// 또는

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

참고

Inversion of Control Containers and the Dependency Injection pattern

The IoC Container :: Spring Framework

The BeanFactory API :: Spring Framework

스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런

profile
개발블로그👩🏻‍💻

0개의 댓글