Spring Basic - 8

mmm·2023년 3월 28일
0

섹션 8. 빈 생명주기 콜백

스프링 빈의 라이프 사이클

  • 객체 생성 → 의존관계 주입
    • 생성자 주입에는 예외) 생성자는 객체를 만들때 이미 스프링 빈이 파라미터로 같이 들어와야함

스프링 빈은 (객체 생성 → 의존관계 주입)이 끝난 후에 필요한 데이터를 사용할 준비가 완료된다.

→ 초기화 작업은 의존관계 주입이 모두 끝난 후에 호출해야 한다.


그렇다면 의존관계 주입이 끝나는 시점은 ?

  • 스프링은 스프링 빈에게 콜백 메서드를 통해 초기화 시점과 종료 작업 시점을 알려주는 다양한 기능을 제공한다.
  • 스프링은 다양한 방식으로 생명주기 콜백을 지원한다.
  • 스프링 빈의 이벤트 라이프사이클
    • 스프링 컨테이너 생성
    • → 스프링 빈 생성
    • → 의존관계 주입
    • → 초기화 콜백 : 빈 생성, 의존관계 주입 후 호출
    • → 사용
    • → 소멸전 콜백 : 빈이 소멸되기 직전에 호출
    • → 스프링 종료

스프링의 빈 생명주기 콜백 방법

  • 인터페이스
    • InitializingBeanafterPropertiesSet()메서드를 통해 초기화
    • DisposableBeandestroy()를 통해 소멸

→ 스프링 전용 인터페이스로, 코드가 스프링 인터페이스에 의존하게 된다. 따라서 초기화/소멸 메서드의 이름을 변경할 수 없고 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다.

  • 빈 등록 초기화, 소멸 메서드 지정
    • 빈을 등록하는 시점에 초기화, 소멸 메서드를 지정해주는 방법
    • @Bean(initMethod = "init", destroyMethod = "close")

→ 스프링 빈이 스프링 코드에 의존하지 않고 메서드 이름을 내가 설정할 수 있다. 또한 코드를 사용하는 것이 아닌 설정 정보를 사용하는 것이므로 코드를 고칠 수 없는 외부 라이브러리에도 적용할 수 있다.

@BeandestroyMethod는 기본값이 (inferred)(추론)이다.

추론이라는 이름 그대로 종료 메서드를 close, shutdown라는 이름의 메서드로 자동으로 호출한다.

→ 직접 스프링 빈으로 등록하면 종료 메서드를 따로 적지 않아도 동작하며, 추론 기능을 사용하기 싫을 경우 destroyMethod=""와 같이 공백을 지정하면 된다.

  • 애노테이션
    • @PostConstruct 초기화 메서드
    • @PreDestroy 소멸 메서드

→ 스프링에서 권장하는 방법으로 애노테이션 하나만 붙이면 된다. 스프링에 종속된 기술이 아닌 자바 표준이라 스프링 외에 다른 컨테이너에서도 작동하지만, 외부 라이브러리에는 적용이 불가능하다. 외부 라이브러리에 적용하려면 위의 방법을 사용!

profile
mmm

0개의 댓글