BackEnd 학습/Spring Framework

Spring(스프링) - 빈 생명주기 콜백

잉아당 2023. 3. 30. 23:21
728x90

빈 생명주기 콜백 시작

  • 스프링 빈의 간단한 라이프 사이클
    1. 객체 생성
    2. 의존관계 주입
  • 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공
  • 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줌
  • 스프링 빈의 이벤트 라이프 사이클
    1. 스프링 컨테이너 생성
    2. 스프링 빈 생성
    3. 의존관계 주입
    4. 초기화 콜백
      1. 빈이 생성되고 , 빈의 의존관계 주입이 완료된 후 호출
    5. 사용
    6. 소멸전 콜백
      1. 빈이 소멸
    7. 스프링 종료
  • 객체의 생성과 초기화를 분리하는 것이 좋음
    • 각자의 역할에 집중하는 것이 좋음(SRP - 단일 책임 원칙)⇒ 단순 작업의 경우 같이 처리하는 것이 효율 적일 수도 있음
    • ⇒ 무거운 작업이 있을 경우

인터페이스 InitializingBean, DisposableBean

  • InitializingBean은 afterPropertiesSet() 메서드로 초기화
  • DisposableBean은 destroy() 메서드로 소멸
  • 초기화, 소멸 단점
    • 스프링 전용 인터페이스에 의존
    • 초기화, 소멸 메서드의 이름을 변경할 수 없음
    • 외부 라이브러리에 적용할 수 없음
  • 현재는 거의 사용하지 않음

빈 등록 초기화, 소멸 메서드

  • 빈 등록에서 (initMethod = "init", destroyMethod = "close") 를 설정하여 지정
  • 특징
    • 메서드 이름을 자유롭게 줄 수 있음
    • 스프링 빈이 스프링 코드에 의존하지 않음
    • 설정 정보이기 때문에 외부 라이브러리에도 적용 가능
  • @Bean의 destroyMethod 설정은 기본값이 “(interred)”로 되어져있음 ⇒ 추론 기능
    • 추론 기능은 “close”, “shutdown” 이름의 메서드를 자동으로 호출
    • 추론기능을 사용하지 않을때 “”(빈값)을 줌

@PostConstruct, @PreDestroy

  • 최신 스프링에서 권장하는 방법
  • 자바 표준이므로 다른 컨테이너에서도 동작
  • 컴포넌트 스캔과 잘 어울림
  • 외부 라이브러리에는 사용하지 못함
  •   (initMethod = "init", destroyMethod = "close") 사용

 

출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8