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 생명 주기를 잘 이해하면, 애플리케이션의 자원 관리와 빈의 동작을 보다 효율적으로 제어할 수 있습니다.