Today I Learned_220808

1 분 소요

Spring Framework

인프런 스프링 강의 수강

Bean Lifecycle Callback

빈 생명주기 콜백 지원 방법

  1. 인터페이스(InitializingBean, DisposableBean)
  2. 설정 정보에 초기화, 종료 메소드 지정
  3. @PostConstruct, @PreDestroy

인터페이스(InitializingBean, DisposableBean)

클래스에 InitializingBean, DisposableBean 인터페이스를 implement하여 사용

  • InitializingBean : afterPropertiesSet() 메소드 구현 필요
  • DisposableBean : destroy() 메소드 구현 필요

스프링 초창기(2003년)에 나온 방식으로, 아래와 같은 단점들이 있다.

  • 스프링 전용 인터페이스이므로 스프링 컨테이너에 의존. 다른 컨테이너 사용할 때는 못 쓴다.
  • 초기화, 소멸 메소드 이름이 고정되어 있어 변경 불가능
  • 내가 코드를 고치지 못하는 외부 라이브러리(클래스파일 등)에 적용 불가능

설정 정보에 초기화, 종료 메소드 지정

설정 정보(AppConfig, Bean 등록하는 부분)에 아래 문구 추가

@Bean(initMethod = "init", destroyMethod = "close")
  • 스프링 빈이 스프링 코드에 의존적이지 않음
  • 메소드 이름을 자유롭게 정할 수 있음
  • 설정 정보를 사용하기에 코드를 고칠 수 없는 외부 라이브러리에도 사용 가능
  • destroyMethod 속성에 추론 기능 존재 -> 해당 속성을 기술하지 않아도 close() 혹은 shutdown() 메소드를 알아서 찾아가서 호출 -> 호출하고 싶지 않으면 destroyMethod=”” 공백 기술

AutoClosable

Java 8 DOC : https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html

try-with-resource 에서 주로 사용됨.

해당 인터페이스를 구현했다면 자원 사용 후(try 종료 후) 객체의 close() 메소드를 호출

@PostConstruct, @PreDestroy

  • 스프링에서 공식적으로 권장하는 방법. 웬만하면 이 방법 쓰자.
  • 자바 표준(javax에 포함)에 해당하여 스프링이 아닌 다른 컨테이너에서도 동작함
  • 사용이 편리함
  • 외부 라이브러리엔 적용 불가 -> 하려면 설정 정보(@Bean)에 추가하는 방법 사용하자.

카테고리:

업데이트: