[SPRING] Bean

2021. 5. 23. 17:36·SPRING
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
'SPRING' 카테고리의 다른 글
  • [SPRING] Interceptor
  • [SPRING] DISPATCHER-SERVLET
  • [SPRING] 컨테이너 (Container)
  • [SPRING] JPA 연관관계
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    Spring
    splunk
    SQL
    프로그래머스
    이펙티브코틀린
    AWS
    코틀린
    자바
    엘라스틱서치
    go
    JPA
    ElasticSearch
    cleancode
    IntelliJ
    Kafka
    docker
    Elk
    클린코드
    이펙티브 코틀린
    java
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[SPRING] Bean
상단으로

티스토리툴바