
ApplicationContext를 통해 이러한 라이프사이클은 스프링의 IoC(Inversion of Control) 컨테이너에 의해 자동으로 관리되며, 특히 AutowireCapableBeanFactory는 빈(Bean)의 자동 주입(Autowiring) 과정에서 중요한 역할을 합니다. 오늘은 @Autowired 애노테이션을 사용할 때 발생하는 라이프사이클에 대해 자세히 살펴보겠습니다.
빈의 생명주기는 생성 단계에서 시작됩니다. @Component, @Service, @Repository 등의 애노테이션이 붙은 클래스는 스프링에 의해 자동으로 스캔되고 빈으로 등록됩니다. 이 과정은 BeanFactory의 구현체인 AutowireCapableBeanFactory에 의해 관리됩니다.
스프링은 @Autowired 애노테이션을 통해 의존성을 자동으로 주입합니다. 이는 AutowireCapableBeanFactory가 BeanPostProcessor를 사용하여 빈의 의존성을 주입하는 단계입니다. 생성된 빈 인스턴스의 필드나 메서드에 @Autowired 애노테이션이 붙어 있으면, 해당 타입에 맞는 빈을 찾아 자동으로 주입합니다.
모든 의존성이 주입된 후, 빈은 초기화 단계를 거칩니다. 이때 @PostConstruct 애노테이션이 붙은 메서드가 호출됩니다. AutowireCapableBeanFactory는 빈의 커스텀 초기화 메서드를 인식하고 호출하여 빈이 올바르게 초기화되도록 합니다.
이제 빈은 사용 준비가 완료되었으며, 애플리케이션의 다양한 부분에서 주입되어 사용됩니다. 이 단계에서 빈은 애플리케이션의 요청을 처리하고, 다른 빈과 상호 작용합니다.
애플리케이션이 종료되면, @PreDestroy 애노테이션이 붙은 소멸 메서드가 호출되며, 빈은 소멸 과정을 거칩니다. AutowireCapableBeanFactory는 빈의 DisposableBean 인터페이스나 소멸 관련 콜백 메서드를 호출하여 리소스를 정리하고, 빈을 올바르게 소멸시킵니다.