카테고리 없음

9. InitializingBean

개발자잡 2025. 2. 21. 22:01

Spring Framework에서 InitializingBean은 빈의 모든 속성이 주입된 후 초기화 작업을 수행할 수 있도록 해주는 인터페이스입니다. 이를 구현하면 Spring 컨테이너가 빈의 프로퍼티 설정이 완료된 후 자동으로 호출하는 afterPropertiesSet() 메서드를 통해 초기화 로직을 작성할 수 있습니다.

아래는 InitializingBean을 사용한 예시와, 그 대안으로 자바 표준 어노테이션인 @PostConstruct를 이용한 예시를 함께 비교해 설명한 내용입니다.

 

 

1. InitializingBean 사용 방식

InitializingBean을 구현하는 방식은 Spring 고유의 인터페이스를 이용해 빈 초기화 시점을 제어합니다.

 

public class MyBean implements InitializingBean {

    private String data;

    public void setData(String data) {
        this.data = data;
    }

    // 빈의 모든 프로퍼티가 설정된 후 호출됨
    @Override
    public void afterPropertiesSet() throws Exception {
        // 예: data 값 검증 및 초기화 작업 수행
        if (data == null) {
            throw new IllegalArgumentException("data property is required");
        }
        System.out.println("MyBean 초기화 완료 (InitializingBean)");
    }
}

 

특징

  • afterPropertiesSet() 메서드 내에서 초기화 로직을 구현합니다.
  • 빈의 모든 프로퍼티가 설정된 후 호출되므로, 의존성 주입이 완료된 상태에서 초기화할 수 있습니다.
  • Spring 전용 인터페이스이기 때문에, 해당 코드는 Spring에 종속적입니다.

2. @PostConstruct를 이용한 초기화 방식

@PostConstruct 어노테이션을 사용하면 표준 자바 어노테이션을 통해 초기화 로직을 구현할 수 있어 Spring 의존성을 줄일 수 있습니다.

import javax.annotation.PostConstruct;

public class MyBean {

    private String data;

    public void setData(String data) {
        this.data = data;
    }

    // 빈의 모든 프로퍼티가 설정된 후 호출됨
    @PostConstruct
    public void init() {
        if (data == null) {
            throw new IllegalArgumentException("data property is required");
        }
        System.out.println("MyBean 초기화 완료 (@PostConstruct)");
    }
}

 

특징

  • @PostConstruct 어노테이션이 붙은 메서드는 빈의 초기화 단계에서 한 번 호출됩니다.
  • 표준 자바 어노테이션이므로, Spring에 의존적이지 않은 코드 작성이 가능합니다.
  • 초기화 로직을 보다 간결하게 표현할 수 있습니다.

 

정리

  • InitializingBean
    • Spring 전용 인터페이스이며, afterPropertiesSet() 메서드를 통해 초기화 로직을 구현합니다.
    • 빈의 의존성 주입이 완료된 후 초기화 작업을 수행할 때 유용합니다.
  • @PostConstruct
    • 표준 자바 어노테이션을 사용하여 동일한 초기화 기능을 구현할 수 있습니다.
    • Spring 의존도를 줄이고, 코드가 간결해지는 장점이 있습니다.

두 방식 모두 빈의 초기화 시점에 필요한 작업을 수행할 수 있게 해주지만, 현대 Spring 개발에서는 @PostConstruct를 포함한 어노테이션 기반 접근 방식이 보다 권장되는 추세입니다.