카테고리 없음
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를 포함한 어노테이션 기반 접근 방식이 보다 권장되는 추세입니다.