728x90
정의
- 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
- 즉 Ioc / DI 컨테이너가 관리하는 자바 객체
스프링 컨테이너는 빈의 생존 기간도 관리하며, 빈의 생존기간을 빈 스코프(Bean Scope)라고 정의함
빈 스코프 (Bean Scope)
종류 | 설명 |
singleton | 컨테이너를 기동할 때 하나의 빈 인스턴스가 만들어지고, 이 후부터 해당 인스턴스를 공유하는 방식, 기본 스코프 |
prototype | 컨테이너에 빈을 요청할 때마다 새로운 빈 인스턴스가 만들어짐, 멀티 스레드 환겨에서 오동작이 발생하지 말아야 하는 빈일 경우 사용 |
request | HTTP 요청이 들어얼 때마다 새로운 빈 인스턴스가 만들어짐, 웹 어플리케이션 만들 때만 사용 가능 |
session | HTTP 세션이 만들어질 때마다 새로운 빈 인스턴스가 만들어짐, 웹 어플케이션을 만들 때만 사용 가능 |
global session | 포틀렛 환경에서 글로벌 HTTP 세션이 만들어질 때마다 새로운 빈 인스턴스가 만들어짐, |
application | 서블릿 컨텍스트가 만들어질 때마다 빈 인스턴스가 만들어짐 |
custom | 스코프 이름을 직접 정의하고, 정의한 규칙에 따라 빈 인스턴스를 만들 수 있음 |
스코프 별 오래 살아있는 순서 : singleton > session > request
빈의 생명주기 단계
- 빈 초기화 단계 (initialization)
- 빈 사용 단계 (activation)
- 빈 종료 단계 (destruction)
빈의 생명주기 과정
- 스프링이 빈을 인스턴스화 함
- 스프링이 값과 빈의 레퍼런스를 빈의 프로퍼티로 주입
- 빈이 BeanNameAware를 구현하면 스프링이 빈의 ID를 setBeanName() 메소드에 넘김
- 빈이 BeanFactoryAware를 구현하면 setBeanFactory() 메소드를 호출하여 빈 팩토리 전체를 넘김
- 빈이 ApplicationContextAware를 구현하면 스프링이 setApplicationContext() 메소드를 호출하고 둘러싼 애플리케이션 컨텍스트에 대한 참조를 넘김
- 빈이 Bean PostProcessor 인터페이스를 구현하면 스프링은 postProcessBeforeInitailization() 메소드를 호출
- 빈이 InitializaingBean 인터페이스를 구현하면 스프링은 afterPropertiesSet() 메소드를 호출
- 빈이 BeanPostProcessor를 구현하면 스프링은 postProcessAfterInitialization() 메소드를 호출
- 빈은 애플리케이션 사용할 준비가 된 것이며, 애플리케이션 컨텍스트가 소멸될 때까지 애플리케이션 컨텍스트에 남아있음
- 빈이 DisposableBean 인터페이스를 구현하면 스프링은 destory() 메소드를 호출, 빈 소멸
'SPRING' 카테고리의 다른 글
[SPRING] Interceptor (0) | 2021.07.11 |
---|---|
[SPRING] DISPATCHER-SERVLET (0) | 2021.06.07 |
[SPRING] 컨테이너 (Container) (0) | 2021.05.23 |
[SPRING] JPA 연관관계 (0) | 2021.05.19 |
[SPRING] 의존성 주입 (0) | 2021.05.17 |