Spring Bean Life cycle
IT IT 인터넷 Spring Core springbean lifecycle
http://java21.net/blog/marco?post_id=2409
Spring Bean Life cycle
Spring Bean 생명 주기는 Spring 컨테이너에서 빈이 생성되고, 초기화되며, 종료되는 과정입니다. 각 단계는 다음과 같습니다:
1. 빈 인스턴스화 (Instantiation)
Spring은 빈의 정의를 바탕으로 해당 빈의 인스턴스를 생성합니다. 이 과정은 XML 설정, 애너테이션 설정, 또는 자바 기반 설정을 통해 이루어집니다. Spring은 리플렉션을 사용하여 객체를 생성합니다.
2. 프로퍼티 주입 (Populate Properties)
빈이 생성되면, Spring은 DI(Dependency Injection)를 통해 빈의 프로퍼티를 설정합니다. 이때 프로퍼티는 주로 생성자, setter 메서드 또는 필드 주입 방식으로 설정됩니다.
3. 빈 이름 설정 (BeanNameAware 인터페이스 구현 시)
빈이
BeanNameAware인터페이스를 구현하고 있으면, Spring은setBeanName()메서드를 호출하여 빈 이름을 전달합니다. 이를 통해 빈은 자신의 이름을 알 수 있습니다.
4. 빈 팩토리 설정 (BeanFactoryAware 인터페이스 구현 시)
빈이
BeanFactoryAware인터페이스를 구현하고 있으면, Spring은setBeanFactory()메서드를 호출하여 빈에게BeanFactory객체를 전달합니다. 이 객체를 통해 빈은 자신이 속한 Spring 컨테이너에 접근할 수 있습니다.
5. ApplicationContext 설정 (ApplicationContextAware 인터페이스 구현 시)
만약 빈이
ApplicationContextAware인터페이스를 구현하고 있다면, Spring은setApplicationContext()메서드를 호출하여 빈에게ApplicationContext객체를 전달합니다. 빈은 이를 통해 전체 애플리케이션 컨텍스트에 접근할 수 있습니다.
6. 초기화 콜백 (초기화 메서드 호출)
빈이 초기화될 때, Spring은
InitializingBean인터페이스의afterPropertiesSet()메서드를 호출하거나,@PostConstruct애너테이션이 있는 초기화 메서드를 실행합니다. 또한,init-method로 지정된 초기화 메서드도 호출됩니다.
7. 빈 사용
초기화가 완료된 후 빈은 애플리케이션에서 사용될 준비가 됩니다. 이제 빈은 다른 빈이나 클라이언트 코드에서 참조되고 사용됩니다.
8. 소멸 콜백 (소멸 메서드 호출)
애플리케이션 종료 시, Spring은 빈이 소멸될 때
DisposableBean인터페이스의destroy()메서드를 호출하거나,@PreDestroy애너테이션이 있는 소멸 메서드를 실행합니다. 또한,destroy-method로 지정된 소멸 메서드도 호출됩니다.
9. 빈 제거
빈의 소멸 후, Spring은 빈을 컨테이너에서 제거하고 메모리에서 해제합니다.
참고:
이 생명 주기는 싱글톤 빈과 프로토타입 빈에 대해 다르게 적용될 수 있습니다. 예를 들어, 싱글톤 빈은 애플리케이션 컨텍스트가 종료될 때 소멸하지만, 프로토타입 빈은 매번 요청 시마다 새로운 인스턴스를 생성하므로 초기화와 소멸이 빈 요청마다 발생할 수 있습니다.
Spring의 Bean 생명 주기를 잘 이해하면, 애플리케이션의 자원 관리와 빈의 동작을 보다 효율적으로 제어할 수 있습니다.