빈 생명 주기 콜백

mark1106·2024년 3월 23일
0

스프링

목록 보기
4/5
post-thumbnail

빈 생명주기 콜백이 필요한 이유

애플리케이션 시작 시점에 필요한 연결을 미리 해두고 종료 시점에 연결을 종료하는 작업에 객체의 초기화와 종료 작업이 필요

스프링 빈의 라이프 사이클 = 객체 생성 -> 의존관계 주입

개발자는 의존 관계 주입까지 모두 끝난 후에야 데이터 사용 가능한데 끝난 시점을 어떻게 알 수 있을까?

스프링 빈의 이벤트 라이프 사이클

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

스프링은 의존 관계 주입 시 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주고, 종료 직전에 소멸 콜백을 줌.

❓생성자 주입을 사용하면 편리하지 않을까??

객체 생성하는 역할과, 초기화하는 역할을 분리하는 것이 단일 책임 원칙(OCP)에 적합하며 유지 보수 관점에서 용이하다.

빈 생명주기 콜백 3가지 방법

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

InitializingBean : afterPropertiesSet() 초기화 메서드

DisposableBean : destory() 소멸 메서드

❌ 단점

  • 스프링 전용 인터페이스에 의존
  • 초기화, 소멸 메서드 이름 변경 x
  • 코드 고칠 수 없는 외부 라이브러리에 적용 x

→ 자바 같은 경우 클래스에 인터페이스를 구현하면 되지만, build.gradle같은 외부 라이브러리들은 이미 컴파일된 상태이므로 코드 변경 불가능

거의 사용하지 않음!!

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

빈 수동 등록 시 @Bean(initMethod = "init", destroyMethod = "close") 초기화, 소멸 메서드 지정

👍장점

  • 메서드 이름 자유
  • 스프링 코드 의존 x
  • 외부 라이브러리에도 초기화, 종료 메서드 적용 가능

3. @PostConstruct, @PreDestroy

초기화 메서드에 @PostConstruct, 종료 메서드에 @PreDestroy 메서드를 붙힌다.

💡정리

  1. 초기화 시 @PostConstruct, 종료 시 @PreDestory 애노테이션을 사용한다.
  2. 코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료할 경우 initMethod, destroyMethod를 설정해준다.

📚 참고

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

profile
뒤돌아보면 남는 것은 사진, 그리고 기록 뿐

0개의 댓글