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