개발/Spring
[Spring] 스프링 빈의 라이프 사이클
함수형 인간
2025. 1. 23. 19:14
스프링 빈의 라이프사이클은 스프링 컨테이너에 의해 관리된다.
다음은 스프링 컨테이너의 작동 과정과 스프링 빈의 라이프사이클 단계이다.
1. 빈 정의 로드 (Bean Definition Loading):
- 컨테이너는 설정 메타데이터(XML, JavaConfig, 어노테이션)를 읽어 어떤 빈들을 생성하고 관리해야 할지 파악,
이 정보를 빈 정의(Bean Definition) 라고 함. - 빈 정의는 빈의 클래스, 스코프, 의존성, 라이프사이클 콜백 메서드 등의 정보를 담고 있음.
2. 빈 인스턴스화 (Bean Instantiation):
- 컨테이너는 빈 정의를 기반으로 리플렉션(Reflection) 을 사용하여 빈 객체의 인스턴스를 생성.
3. 의존성 주입 (Dependency Injection - DI):
- 컨테이너는 빈 인스턴스에 필요한 의존 객체들을 주입
- 의존성 주입은 생성자, setter 메서드, 필드 주입 등 다양한 방식으로 이루어질 수 있음.
4. 빈 초기화 콜백 (Initialization Callbacks):
- 의존성 주입이 완료된 후, 컨테이너는 설정된 초기화 콜백 메서드를 호출.
- 이 단계에서 빈은 필요한 리소스를 할당하거나, 외부 시스템과 연결하는 등의 초기화 작업을 수행가능.
- @PostConstruct, init-method, @Bean(initMethod = "...") 등이 이 단계에 해당한다.
5. 빈 사용 (Bean in Use):
- 이 단계에서의 빈은 애플리케이션에서 사용 준비가 되었다고 할 수 있다.
- 다른 빈이나 애플리케이션 로직에서 해당 빈의 메서드를 호출하여 필요한 기능을 수행.
6. 빈 소멸 전 콜백 (Pre-Destroy Callbacks):
- 컨테이너가 종료되거나 빈의 스코프가 종료될 때 컨테이너는 설정된 소멸 전 콜백 메서드를 호출.
- 이 단계에서 빈은 사용하던 리소스를 해제하거나, 외부 시스템과의 연결을 종료하는 등의 정리 작업을 수행할 수 있습니다.
- @PreDestroy, destroy-method, @Bean(destroyMethod = "...") 등이 이 단계에 해당한다.
7. 빈 소멸 (Bean Destruction):
- 빈 소멸 전 콜백 메서드 실행 후, 컨테이너는 빈 인스턴스를 가비지 컬렉션(Garbage Collection) 대상으로 표시하여 메모리에서 제거.