Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

빈 라이프 사이클 콜백 중 무엇을 써야하는가? (인터페이스 vs 초기화, 종료 메서드 vs @PostConstruct, @PreDestroy) #6

Open
kmw10693 opened this issue Mar 8, 2022 · 2 comments

Comments

@kmw10693
Copy link

kmw10693 commented Mar 8, 2022

빈 라이프 사이클에 대해 공부하던 중,
빈 라이프 사이클 콜백 방법에 대해 각각의 장점과 단점을 정리해보았습니다.

스프링은 크게 3가지 방법으로 빈 라이프 사이클 콜백을 지원합니다.

  1. 초기화 소멸 인터페이스(InitializingBean, DisposableBean)
  2. 설정 정보에 초기화, 종료 메서드 지정
  3. @PostConstruct, @PreDestory 애노테이션 지원

초기화, 소멸 인터페이스 단점

  • InitializingBean, DisposableBean 인터페이스는 스프링 전용 인터페이스 입니다.
  • 따라서 해당 코드가 스프링 전용 인터페이스에 의존하는 단점을 갖고 있습니다.
  • 또한 초기화, 소멸 메서드가 afterPropertiesSet() 메서드, destroy() 메서드로 각각 정의되어 있어 초기화, 소멸 메서드의 이름을 변경할 수 없습니다.
  • 또한 외부 라이브러리에 적용할 수 없습니다.

참고: 인터페이스를 사용하는 초기화, 종료 방법은 스프링 초창기에 나온 방법들이고, 지금은 다음의 더
나은 방법들이 있어서 거의 사용하지 않는다.

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

  • 메서드 이름을 자유롭게 줄 수 있다.
  • 스프링 빈이 스프링 코드에 의존하지 않는다.
  • 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료
  • 메서드를 적용할 수 있다.

애노테이션 @PostConstruct, @PreDestroy

  • 최신 스프링에서 가장 권장하는 방법이다.
  • 애노테이션 하나만 붙이면 되므로 매우 편리하다.
  • 패키지를 잘 보면 javax.annotation.PostConstruct 이다. 스프링에 종속적인 기술이 아니라 JSR-250
  • 라는 자바 표준이다. 따라서 스프링이 아닌 다른 컨테이너에서도 동작한다.
  • 컴포넌트 스캔과 잘 어울린다.

유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다. 외부 라이브러리를 초기화, 종료 해야 하면
@bean의 기능을 사용하자.

정리

@PostConstruct, @PreDestroy 애노테이션을 사용하자
코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @bean 의 initMethod , destroyMethod
를 사용하자.

@YoumHyeJi
Copy link

역시 @PostConstruct, @PreDestroy 애너테이션을 사용하는게 코드도 깔끔하고, 스프링에 종속되지 않아서 좋은 거 같아~
외부 라이브러리를 초기화, 종료할 땐 @bean의 initMethod, destroyMethod 애트리뷰트를 설정하면 된다는 건 처음 알았다!!

@ksi05503
Copy link
Contributor

귯귯 내부 로직 -> 애너테이션방식 / 외부 라이브러리 -> @bean의 init, destroy 속성 정의
두개로 기억하면 되겠구만

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants