Spring 프레임워크는 객체 간의 의존성을 관리하고, 애플리케이션 개발을 간소화하기 위해 IoC(제어의 역전) 컨테이너를 활용한다. 이 컨테이너는 애플리케이션의 구성 요소를 Spring Bean으로 관리하며, 초기화, 의존성 주입, 소멸 등 객체의 생명주기를 체계적으로 제어한다. 이 글에서는 Spring Bean의 개념, 생명주기, 초기화 및 소멸 전 콜백 메소드 구현 방식을 정리하고자 한다.
Spring Bean은 Spring IoC 컨테이너가 관리하는 객체를 의미한다. 일반적으로 애플리케이션의 주요 비즈니스 로직을 구현한 클래스를 Spring Bean으로 등록하며, 설정 파일(XML), 애노테이션, 또는 Java Config 방식으로 Bean을 정의할 수 있다.
Spring Bean의 라이프사이클은 아래와 같은 단계로 이루어진다.
스프링 IoC 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 전 콜백 메소드 호출 → 스프링 종료
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
스프링은 크게 4가지 방법으로 Bean 생명주기 콜백을 관리한다.
- @PostConstruct와 @PreDestroy 애노테이션
- InitializingBean과 DisposableBean 인터페이스
- XML 설정
- Java Config 설정
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class MyBean {
@PostConstruct
public void init() {
System.out.println("초기화 메서드 실행 (@PostConstruct)");
}
@PreDestroy
public void destroy() {
System.out.println("소멸 메서드 실행 (@PreDestroy)");
}
}
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
@Component
public class MyBean implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() {
System.out.println("초기화 메서드 실행 (InitializingBean)");
}
@Override
public void destroy() {
System.out.println("소멸 메서드 실행 (DisposableBean)");
}
}
<bean id="myBean" class="com.example.MyBean" init-method="init" destroy-method="cleanup"/>
public class MyBean {
public void init() {
System.out.println("초기화 메서드 실행 (XML 설정)");
}
public void cleanup() {
System.out.println("소멸 메서드 실행 (XML 설정)");
}
}
@Configuration
public class AppConfig {
@Bean(initMethod = "init", destroyMethod = "cleanup")
public MyBean myBean() {
return new MyBean();
}
}
public class MyBean {
public void init() {
System.out.println("초기화 메서드 실행 (Java Config)");
}
public void cleanup() {
System.out.println("소멸 메서드 실행 (Java Config)");
}
}