🔄 Bean 생명주기와 콜백
- 콜백 메서드란?
⇢ Spring Bean이 생성 → 의존성 주입 → 초기화 → 사용 → 소멸
의 과정을 거칠 때 특정 시점에서 실행되는 메서드
👉 주로 초기화 작업(DB 연결, 리소스 준비)이나 소멸 작업(연결 해제, 파일 닫기)에 사용됨
🏗️ Spring Bean 생명주기 단계
1. 🏢 Spring Container 생성

ApplicationContext 또는 BeanFactory 컨테이너가 초기화됨@Configuration, @ComponentScan, XML 등)2. 🧩 Bean 인스턴스 생성

3. 🔗 의존성 주입 (DI)

💡 이 단계가 끝나야 Bean이 정상적으로 사용 가능
4. ⚡ 초기화 콜백

@PostConstruct 또는 afterPropertiesSet() 실행5. 🛠️ Bean 사용
6. 🧹 소멸 전 콜백

@PreDestroy 또는 destroy() 실행7. 📴 Spring 종료 (Bean 소멸)
📝 생명주기 요약
@PostConstruct, afterPropertiesSet())@PreDestroy, destroy())🛠️ Spring이 지원하는 콜백 방법
1. 🧩 인터페이스 구현 → InitializingBean, DisposableBean
2. ⚙️ @Bean 속성 → initMethod, destroyMethod
3. 🏷️ 어노테이션 → @PostConstruct, @PreDestroy
⚡
InitializingBean,DisposableBean
- 인터페이스를 사용하여 콜백 메서드를 사용하는 방법은
최근에는 잘 사용하지 않는 방법이지만,
전체적인 동작 흐름을 코드로 이해하기 위해 만든 예시
💻 인터페이스 예시 코드
public class MyBean implements InitializingBean, DisposableBean {
private String data;
public MyBean() {
System.out.println("Bean 생성자 호출");
System.out.println("data = " + data);
}
public void setData(String data) {
this.data = data;
}
// 초기화 콜백
@Override
public void afterPropertiesSet() {
System.out.println("MyBean 초기화 - afterPropertiesSet() 호출됨");
System.out.println("data = " + data);
}
// 소멸 콜백
@Override
public void destroy() {
System.out.println("MyBean 종료 - destroy() 호출됨");
data = null;
}
public void doSomething() {
System.out.println("MyBean 작업 중...");
}
}
📊 실행 흐름 출력 결과
1. 🏗️ Bean 생성자 호출
Bean 생성자 호출
data = null
2. 🔗 의존성 주입 (setData)
3. ⚡ 초기화 콜백 실행
MyBean 초기화 - afterPropertiesSet() 호출됨
4. 🛠️ Bean 사용
MyBean 작업 중...
data = Example
5. 📴 Spring 종료 직전
Example
MyBean 종료 - destroy() 호출됨
null
⚠️ 인터페이스 방식의 단점
afterPropertiesSet, destroy)👉 그래서 최근에는 @PostConstruct, @PreDestroy 어노테이션 방식을 더 많이 사용함
🧠 요약 정리
📂 Spring Bean 생명주기 요약표
| 단계 | 설명 | 지원되는 콜백/방법 |
|---|---|---|
| 1. 컨테이너 생성 | ApplicationContext 또는 BeanFactory 생성,Bean 정의 읽음 | - |
| 2. Bean 인스턴스 생성 | Bean 객체 생성 (싱글톤 → 시작 시 / 프로토타입 → 요청 시) | 생성자 호출 |
| 3. 의존성 주입 (DI) | 필요한 Bean 연결 (생성자, Setter, 필드 주입) | - |
| 4. 초기화 콜백 | Bean 사용 전 준비 단계 (DB 연결, 리소스 초기화) | @PostConstruct, afterPropertiesSet() |
| 5. Bean 사용 | 애플리케이션에서 비즈니스 로직 수행 | - |
| 6. 소멸전 콜백 | 컨테이너 종료 직전 리소스 정리 (DB 해제, 파일 닫기) | @PreDestroy, destroy() |
| 7. Bean 소멸 | 메모리에서 제거, 더 이상 사용 불가 | - |
🛠️ 콜백 방식 비교
| 방식 | 설명 | 장점 | 단점 |
|---|---|---|---|
InitializingBean, DisposableBean | 인터페이스 구현 후 메서드(afterPropertiesSet, destroy)오버라이딩 | 코드 흐름 명확, 학습용 예제에 적합 | Spring에 종속적, 메서드명 강제 |
@Bean(initMethod, destroyMethod) | @Bean 정의 시 초기화/소멸 메서드 지정 | 외부 라이브러리에도 적용 가능 | XML/자바 설정에 의존 |
@PostConstruct, @PreDestroy | 애노테이션 기반 초기화/소멸 처리 | 가장 간단, 실무에서 권장 | JSR-250 지원 필요 |