[Java] 빈 생명주기 콜백(초기화 콜백, 소멸 콜백)

전재준·2022년 1월 17일
0

Java

목록 보기
14/15

스프링 빈은 객체생성 -> 의존성 주입 단계의 라이플사이클은 가진다.

스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다.

스프링 빈의 이벤트 LifeCycle

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

  • 필드주입, set주입은 스프링 빈이 생성되고 의존관계 주입이 일어나지만 생성자주입은 스프링 빈 생성과 동시에 의존관계 주입이 된다.

어플리케이션이 동작할 때 스프링 빈을 생성하고 의존관계 주입 후 초기화를 해주는 과정이 필요 할 수도 있다.(ex)DB커넥션, 소켓서버)이런 경우 의존관계 까지에 설정이 끝난 후 초기화 콜백을 어떻게 제어할 수 있는지 알아보자.

  1. 인터페이스(InitializingBean, DisposableBean)

해당 인터페이스를 이용하면 초기화 콜백, 소멸 콜백 메서드로 초기화를 지원한다.

해당 인터페이스의 단점

  • 스프링 전용 인터페이스이므로 해당 코드가 스프링 전용 인터페이스에 의존한다.
  • @Override를 통해 구현하므로 메소드 이름을 변경 할 수 없다.
  • 인터페이스에 메소드를 이용하므로 외부 라이브러리에는 적용 할 수 없다.

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

해당 @Bean 에 직접 메소드 이름으로 초기화메소드와 소멸 메소드를 지정할 수 있다.

설정 정보의 사용특징

  • 메서드 이름을 자유롭게 줄 수 있다.
  • 스프링 빈이 스프링 코드에 의존하지 않는다
  • 외부 라이브러리에도 초기화, 종료 메서드를 적용 할 수 있다.

destroyMethod 의 특수기능

  • destroyMethod는 기본값이 (inferred)추론으로 등록되어있다. 보통 라이브러리는 종료하는 메소드 이름이 close, shutdown 이라는 이름으로 종료 메서드를 사용한다. 그래서 destroyMethod을 따로 적어주지 않아도 추론해서 close, shutdown 메소드가 존재하면 자동으로 호출해준다.

  • 해당 기능을 사용하고 싶지 않으면 destroyMethod="" 으로 공백으로 설정한다.

3.@PostConstruct, @PreDestroy

어노테이션을 이용해 초기화와 종료를 실행할 수 있다.

가장 편리하게 사용할 수 있는 방법이다
스프링에서 가장 권장하는 방법이고 javax 패키지를 사용해 스프링에 종속적인 기술이 아니라 JSR-250의 자바 표준이라 스프링이 아닌 다른 컨테이너 에서도 동작한다.

유일한 단점

  • 이것도 외부 라이브러리에 적용할 수 없다. 외부 라이브러리에 적용을 해야한다면 2번 @Bean에 설정하는 기능을 이용하자.

참고자료

0개의 댓글

관련 채용 정보