Spring/핵심원리

[스프링 핵심원리 - 기본편] 내용 정리6

슈코 2023. 8. 30. 22:58

빈 생명주기 콜백

스프링 빈 객체의 초기화와 종료 작업

스프링 빈은 객체 생성 → 의존관계 주입이라는 라이프 사이클을 가짐

초기화 작업은 의존관계 주입 이후에 호출해야한다

스프링은 의존관계 주입이 끝나면 스프링 빈에게 콜백 메소드를 통해 초기화 시점을 알려주는 기능을 제공한다

스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 실행한다

 

간단하지만, 반드시 알아두자!

스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링 종료

 

객체의 생성초기화 작업을 분리하자

생성자는 필수정보를 받고, 메모리를 할당해서 객체를 생성하는 책임

초기화는 생성된 값을 활용해서 외부 커넥션 등의 무거운 동작 수행

명확하게 역할을 구분하는 것이 유지보수 관점에서 좋다

 

스프링의 빈 생명주기 콜백 지원

  • 인터페이스( InitalizingBean, DisposableBean )
  • 설정 정보에 초기화 메소드, 종료 메소드 지정
  • @PostConstruct, @PreDestory 애노테이션 지원

 

인터페이스( InitalizingBean, DisposableBean )

  • InitalizingBean은 afterPropertiesSet() 을 초기화 메소드로 지원
  • DisposableBean은 destroy() 를 소멸 메소드로 지원
  • 해당 인터페이스는 스프링 전용 인터페이스 ( 이 코드는 스프링 인터페이스에 의존한다 )
  • 초기화 / 소멸 메소드는 딱 정해져 있어서 이름 변경은 할 수 없다
  • 외부 라이브러리( 내가 수정할 수 없는 )에 적용할 수 없다
  • 초창기에 나온 방법 ( 현재는 잘 사용하지 않는다 )

 

빈 등록 초기화, 소멸 메소드 지정

  • @Bean(initMethod = "init", destroyMethod = "close") 으로 초기화 / 소멸 메소드를 지정
  • 매소드 이름을 지정할 수 있다
  • 스프링 코드에 의존하지 않는다
  • 설정 정보를 사용하기 때문에, 외부 라이브러리( 내가 수정할 수 없는 )에도 적용 가능하다
  • @Bean의 destroyMethod는 추론기능(close, shutdown 이라는 메소드를 자동으로 호출)을 제공
    • 직접 스프링 빈을 등록하면, 해당 메소드가 있으면 자동으로 소멸 메소드로 지정하고 실행됨
    • 추론 기능을 쓰기 싫다면, destroyMethod="" 처럼 빈 공백 지정

 

★애노테이션 @PostConstruct, @PreDestroy

( 해당 기능을 사용하면 된다! )

  • 최신 스프링에서 가장 권장하는 방법
  • 초기화 / 소멸 메소드를 만들고, 애노테이션만 붙여주면 된다( 편리하다! )
  • 스프링 기술이 아니라, 자바 표준( 스프링에 종속하지 않는다 )
  • 외부 라이브러리( 내가 수정할 수 없는 )에는 사용하지 못한다
    • 외부 라이브러리 사용 시 @Bean에 메소드로 지정하자