스프링 빈 생명주기 콜백

Sanghyeop Lee·2023년 2월 20일
0

Spring

목록 보기
5/5
post-thumbnail

스프링에는 스프링 빈이 생성되거나 소멸하기 직전에 메소드를 호출해줄 수 있는 기능이 있는데 크게 세가지 방식이 있다.

InitializingBean, DisposableBean 인터페이스

public class NetworkClient implements InitializingBean, DisposableBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        connect();
        call("초기화 연결 메세지");
    }

    @Override
    public void destroy() throws Exception {
        disconnect();
    }    
}

InitializingBean 인터페이스는 afterPropertiesSet() 메서드로 초기화 콜백을 지원하고 DisposableBean 인터페이스는 destroy() 메서드로 소멸 콜백을 지원한다.

  • 단점
    • 스프링 빈의 코드(Java 클래스)가 스프링 전용 인터페이스에 의존하게 된다.
    • 초기화, 소멸 메소드의 이름을 변경할 수 없다.
    • 내가 코드를 수정할 수 없는 외부 라이브러리에는 적용할 수 없다.

빈 설정 정보 사용

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

@Bean(initMethod = "init", destroyMethod = "close") 처럼 스프링 빈 설정 정보에서 초기화, 소멸 콜백 메소드를 지정해줄 수 있다.

  • destroyMethod 속성의 메소드 추론 기능
    • @BeandestroyMethod의 기본값은 (inferred)인데 close, shutdown 이라는 이름을 가진 메소드를 detroyMethod로 추론해서 자동으로 호출해준다.
  • 장점
    • 스프링 빈이 스프링 전용 인터페이스에 의존하지 않는다.
    • 초기화, 소멸 메소드의 이름을 마음대로 설정할 수 있다.
    • 내가 코드를 수정할 수 없는 외부 라이브러리에도 적용할 수 있다.

@PostConstruct, @PreDestroy 어노테이션

public class NetworkClient
{
    @PostConstruct
    public void init() {
        connect();
        call("초기화 연결 메세지");
    }
    
    @PreDestroy
    public void close() {
        disconnect();
    }    
}

@PostConstruct, @PreDestroy 어노테이션을 메소드 앞에 붙여서 초기화, 소멸 콜백 메소드로 지정할 수 있다.

  • 장점
    • 매우 간단해서 편리하다.
    • 스프링 종속적인 기술이 아니라 자바 표준 기술이다..!
    • 최근 스프링에서 권장하는 방법이므로 주로 사용하면 된다.
  • 단점
    • 외부 라이브러리에는 적용할 수 없다. (필요한 경우에는 앞의 빈 설정정보로 지정해주는 방법을 사용하자.)

참조

profile
개발자꿈나무

0개의 댓글