빈 생명주기 콜백

udonehn·2023년 11월 4일
0

빈 생명주기 콜백 시작

스프링 빈의 이벤트 라이프사이클은 다음과 같다

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

  1. 초기화 콜백: 빈이 생성되고 의존관계 주입이 완료된 후 호출되는 콜백
  2. 소멸전 콜백: 빈이 소멸되기 직전에 호출되는 콜백

참고:

  • 생성자 주입은 스프링 빈 생성과 의존관계 주입이 동시에 이루어진다.
  • 객체의 생성과 초기화는 분리하는 것이 좋다. 역할 분리 측면에서도 유리하며, 초기화는 많은 자원을 소모하는 부분이기 때문이다.

스프링은 3가지 방법으로 빈 생명주기 콜백을 지원한다.

  • 인터페이스(InitializingBean, DisposableBean)
  • 설정 정보에 초기화 메서드, 종료 메서드 지정
  • @PostConstruct, @PreDestroy 애노테이션

인터페이스 InitializingBean, DisposableBean

스프링 빈이 생성된 후에 초기화 작업이 필요하다면 InitializingBean 메서드를, 빈이 소멸되기 전에 작업이 필요하다면 DisposableBean 메서드를 사용하면 된다.

각각 스프링의 인터페이스 클래스를 구현하여 사용한다.

public class ExClass implements InitializingBean, DisposableBean {

	// 필드, 메서드 및 생성자. . .
    
    @Override
    public void afterPropertiesSet() throws Exception {
        // 빈 생성 직후 필요한 작업
    }

    @Override
    public void destroy() throws Exception {
        // 빈 소멸 직전 필요한 작업
    }
}

이러한 인터페이스 방식은 최근에는 잘 사용하지 않는다.

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

@Bean 애노테이션에 속성값을 지정해 사용할 수 있다.

        @Bean(initMethod = "init", destroyMethod = "close")
        public NetworkClient networkClient(){
            NetworkClient networkClient = new NetworkClient();
            networkClient.setUrl("http://hello-spring.dev");
            return networkClient;
        }

빈 생성 후에는 NetworkClient 클래스의 init 메서드가, 빈 소멸 시에는 close 메서드가 실행된다.

이러한 방식은 스프링 빈이 스프링 코드에 의존하지 않다는 장점이 있다.

애노테이션 @PostConstruct, @PreDestroy

가장 권장되는 방식이다.

NetworkClient 클래스에서 빈 생성 후에 호출될 메서드에 @PostConstruct 애노테이션을, 소멸 전에 호출될 메서드에 @preDestroy 애노테이션을 붙인다.

    @PostConstruct
    public void init() {
        // 빈 생성 후에 필요한 작업
    }

    @PreDestroy
    public void close() {
        // 빈 소멸 전에 필요한 작업
    }

간단하고 편리한 방법으로, 스프링에 종속적인 기술이 아닌 자바 표준 기술이다. 최신 스프링에서 가장 권장되는 방법이다.

본 포스팅은 김영한 강사의 스프링 핵심 원리 강의를 수강하고 요약한 것으로, 해당 강의의 영상 및 강의자료를 참고하였습니다.

profile
안녕하세요. 만나서 반갑습니다.

0개의 댓글

관련 채용 정보