SPRING

[SPRING] Bean

집한구석 2021. 5. 23. 17:36
728x90

정의

  • 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
  • 즉 Ioc / DI 컨테이너가 관리하는 자바 객체 

스프링 컨테이너는 빈의 생존 기간도 관리하며, 빈의 생존기간을 빈 스코프(Bean Scope)라고 정의함


빈 스코프 (Bean Scope)

종류 설명
singleton 컨테이너를 기동할 때 하나의 빈 인스턴스가 만들어지고, 이 후부터 해당 인스턴스를 공유하는 방식, 기본 스코프
prototype 컨테이너에 빈을 요청할 때마다 새로운 빈 인스턴스가 만들어짐, 멀티 스레드 환겨에서 오동작이 발생하지 말아야 하는 빈일 경우 사용
request HTTP 요청이 들어얼 때마다 새로운 빈 인스턴스가 만들어짐, 웹 어플리케이션 만들 때만 사용 가능
session HTTP 세션이 만들어질 때마다 새로운 빈 인스턴스가 만들어짐, 웹 어플케이션을 만들 때만 사용 가능
global session 포틀렛 환경에서 글로벌 HTTP 세션이 만들어질 때마다 새로운 빈 인스턴스가 만들어짐, 
application 서블릿 컨텍스트가 만들어질 때마다 빈 인스턴스가 만들어짐
custom 스코프 이름을 직접 정의하고, 정의한 규칙에 따라 빈 인스턴스를 만들 수 있음

스코프 별 오래 살아있는 순서 : singleton > session > request


빈의 생명주기 단계

  1. 빈 초기화 단계 (initialization)
  2. 빈 사용 단계 (activation)
  3. 빈 종료 단계 (destruction)

빈의 생명주기 과정

생성주기 과정

  1. 스프링이 빈을 인스턴스화 함
  2. 스프링이 값과 빈의 레퍼런스를 빈의 프로퍼티로 주입
  3. 빈이 BeanNameAware를 구현하면 스프링이 빈의 ID를 setBeanName() 메소드에 넘김
  4. 빈이 BeanFactoryAware를 구현하면 setBeanFactory() 메소드를 호출하여 빈 팩토리 전체를 넘김
  5. 빈이 ApplicationContextAware를 구현하면 스프링이 setApplicationContext() 메소드를 호출하고 둘러싼 애플리케이션 컨텍스트에 대한 참조를 넘김
  6. 빈이 Bean PostProcessor 인터페이스를 구현하면 스프링은 postProcessBeforeInitailization() 메소드를 호출
  7. 빈이 InitializaingBean 인터페이스를 구현하면 스프링은 afterPropertiesSet() 메소드를 호출 
  8. 빈이 BeanPostProcessor를 구현하면 스프링은 postProcessAfterInitialization() 메소드를 호출
  9. 빈은 애플리케이션 사용할 준비가 된 것이며, 애플리케이션 컨텍스트가 소멸될 때까지 애플리케이션 컨텍스트에 남아있음
  10. 빈이 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