상세 컨텐츠

본문 제목

[Spring] 컨테이너(Container)

IT/Spring 및 Boot

by SINAFLA 2021. 5. 29. 10:34

본문

반응형

스프링 컨테이너란?

  • Container 는 Spring 의 핵심이다. 스프링 프레임워크는 스프링의 빈을 생성하고 관리하는 컨테이너를 가지고 있다. 이를 통해서 스프링의 주 개념인 IoC 나 AOP에 대해서 관리한다.

 

스프링 컨테이너의 종류

  • Bean Factory와 ApplicationContext 유형 2가지가 있다.

 

Bean Factory

  • 스프링 설정 파일에 등록된 Bean 객체를 생성하고 관리하는 기본적인 기능만 제공한다.
  • 컨테이너가 구동될 때 Bean 객체를 생성하는 것이 아니라 클라이언트의 요청에 의해서 Bean 객체가 사용되 는 시점(Lazy Loading) 에 객체를 생성하는 방식을 사용한다.

Application Context

  • BeanFactory를 상속 받는다.
  • Bean 객체를 생성하고 관리하는 기능을 가진다.
  • 트랜잭션 관리, 메시지 기반의 다국어 처리, AOP 처리 등 DI(Dependency Injection) 과 IoC(Inverse of Conversion) 외에도 많은 부분을 지원하고 있다.
  • 컨테이너가 구동되는 시점에 객체들을 생성하는 Pre-Loading 방식을 사용한다.

 

컨테이너의 생명주기

  • 생성 → 빈 설정 → 사용 → 소멸

AnnotationConfigApplicationContext ctx = new AnnotationConfigAppLicationContext(); // 빈 추가 등록 ctx.register(); // 빈 반영 (갱신해야 반영함) ctx.refresh(); // 소멸 (반영된 빈도 함께) ctx.close(); // JVM 소멸시 자동으로 소멸되게 처리 ctx.registerShutdonwHook();

 

Bean 생명 주기(Lifecycle)

  • 객체 생성 → 초기화 → 사용 → 소멸
  1. 초기화
    • @PostCOnstruct 활용
    • InitializingBean 인터페이스 구현하여 사용, afterPropertiesSet 메서드 오버라이드
    • 커스텀 init 메소드 (빈 정의 xml에 init-method 로 메소드명 지정 / @Bean(initMethod="init"))
  2. 소멸
    • @PreDestory 사용
    • DisposableBean 인터페이스
    • 커스텀 destroy 메소드 정의
  3. 스프링 컨테이너, 빈 이름 가져오기
    • ApplicationContextAware 사용
    • BeanNameAware 인터페이스를 활용한다.
  4. Bean 범위 (scope)
    • default로 Singleton을 적용한다. (객체가 하나만 존재)
    • Prototype : 매번 호출될 때마다 인스턴스 생성됨, 스프링 컨테이너가 소멸되도 인스턴스들은 계속 유지됨)

 

반응형

관련글 더보기

댓글 영역