스프링 핵심 원리 - 기본편(빈 생명주기 콜백)

2022. 4. 27. 20:57·Spring

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

 

스프링 빈은 객체를 생성한 다음 의존관계를 주입하는 라이프사이클을 가진다. (ex: Setter, Field Injection)

  예외) 생성자 주입

 

초기화 작업은 의존관계 세팅이 완료된 후에 진행된다. 그 시점을 어떻게 알까?

  👉스프링이 초기화 콜백으로 알려준다 ^^

 

또한 스프링 컨테이너는 종료되기 직전에 소멸 콜백을 준다.

 

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

 

초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출

소멸전 콜백 : 빈이 소멸되기 직전에 호출

 


객체의 생성과 초기화를 분리하자

객체의 생성 : 메모리를 할당해 객체를 생성하는 수준에서 끝남

초기화 : 값을 활용해서 커넨션 연결 등 무거운 동작을 수행한다.

이를 명확하게 나누는 것이 유지보수 관점에서 좋다.


[빈 생명주기 콜백 지원 방법]

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

-) 스프링 전용 인터페이스이며 의존적이다

-) 메서드의 이름을 변경할 수 없다.

잘 사용하지는 않는다😅

public class NetworkClient implements InitializingBean, DisposableBean {
...
@Override
    public void afterPropertiesSet() throws Exception {
    }

    @Override
    public void destroy() throws Exception {
    }

 

2. 설정 정보에 빈 등록 초기화, 소멸 메서드 만들기

+) 스프링에 의존적이지 않다.

+) 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다.

 

@Bean의 DestoryMethod : 주로 close, shutdown을 사용하지만 inferred가 기본값인데, 이 기능은 close, shutdown메서드를 자동으로 사용하며 종료 메서드를 추론해서 호출해 준다.추론 기능이 싫으면 destroymethod=""로 설정하나 권장은..안함

@Configuration
static class LifeCycleConfig{
    @Bean(initMethod = "init", destroyMethod = "close")

3. Annotation @PostContruct, @PreDestroy [가장 권장]

간단하며 자바 표준이기 때문에 스프링이 아닌 컨테이너에서도 잘 작동한다.

빈을 등록하는 것이 아니기 때문에 컴포넌트 스캔과 잘 어울린다. 

-) 외부 라이브러리에 적용하지 못한다. 외부 라이브러리에 적용할 시 @Bean(initMethod, destroyMethod)를 사용하자

@PostConstruct
public void init() {
}
@PreDestroy
public void close() {
}
저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

Reactive Programming  (0) 2022.06.30
스프링 핵심 원리 - 기본편(빈 스코프)  (0) 2022.04.28
스프링 핵심 원리 - 기본편(의존관계 자동 주입)  (0) 2022.04.27
스프링 핵심 원리 - 기본편(컴포넌트 스캔과 의존관계 자동 주입)  (0) 2022.04.25
스프링 핵심 원리(기본편) - 스프링 컨테이너와 스프링 빈  (0) 2022.04.18
'Spring' 카테고리의 다른 글
  • Reactive Programming
  • 스프링 핵심 원리 - 기본편(빈 스코프)
  • 스프링 핵심 원리 - 기본편(의존관계 자동 주입)
  • 스프링 핵심 원리 - 기본편(컴포넌트 스캔과 의존관계 자동 주입)
코드파고
코드파고
  • 코드파고
    Digging Code
    코드파고
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • Memorization (12)
      • Spring (18)
      • Java (1)
      • Algorithm (40)
      • Server (2)
      • DB (0)
      • CS (0)
      • CI & CD (4)
      • Architecture (0)
      • Design Patterns (0)
      • Study (1)
      • Book (9)
        • DEV (7)
        • Non-DEV (0)
      • Infra (1)
        • Kafka (6)
        • AWS (4)
      • TroubleShooting (1)
        • Etc (1)
      • Tools (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    헥사고날아키텍쳐
    Clean Code
    클린아키텍쳐
    알고리즘
    Spring
    SpringFramework
    clean architecture
    Spring Boot
    Spring독학
    architecture
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
코드파고
스프링 핵심 원리 - 기본편(빈 생명주기 콜백)
상단으로

티스토리툴바