Spring 빈 생명주기( Bean Life Cycle )

빈 생명주기(Bean Life Cycle)

빈(Bean) 생명주기는 Spring Framework에서 관리되는 객체가 생성되고, 초기화되고, 소멸되는 과정을 말합니다.

Spring은 빈의 생명주기를 관리하기 위해 다양한 콜백 메서드와 인터페이스를 제공합니다.

 

Spring의 빈 생명주기 관리는 개발자가 별도로 처리할 필요 없이 Spring 컨테이너가 자동으로 처리해주기 때문에 편리합니다. 이를 통해 객체의 초기화 및 소멸에 관련된 로직을 적절히 구현하고 관리할 수 있습니다.

 

  1. 스프링 컨테이너 생성
  2. 스프링 빈 생성
  3. 의존 관계 주입
  4. 초기화 콜백
  5. 빈 사용
  6. 소멸전 콜백
  7. 스프링 종료

 

아래 이미지는 더욱 상세히 빈 생명주기를 보여주는 이미지입니다.

출처: https://velog.io/@destiny1616/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0

 


빈 인스턴스화 및 DI

  • 빈 인스턴스의 생성
    Spring 컨테이너는 빈을 생성하기 위해 해당 빈의 클래스를 인스턴스화합니다. 빈 클래스는 일반적으로 기본 생성자를 가지며, 필요에 따라 의존성 주입을 통해 초기화될 수도 있습니다.

  • 의존성 주입
    Spring은 빈이 의존하는 다른 빈을 주입하여 객체 간의 관계를 설정합니다. 의존성 주입은 생성자 주입, 수정자 주입, 필드 주입 등의 방식으로 이루어질 수 있습니다.

 


빈 생성 생명주기 콜백

  • 초기화 콜백
    빈이 생성되고 의존성 주입이 완료되면, Spring은 초기화 콜백 메서드를 호출하여 빈을 초기화할 수 있습니다. 초기화 콜백은 InitializingBean 인터페이스를 구현하거나 init-method를 지정하거나 @PostConstruct 어노테이션을 사용하여 정의할 수 있습니다. 초기화 콜백 메서드는 빈이 사용 가능한 상태가 되도록 필요한 초기화 작업을 수행합니다.

 

@PostConstruct 어노테이션

`@PostConstruct` 어노테이션을 초기화 메서드에 부여하여 초기화 콜백을 정의할 수 있습니다. 이 방식은 간결하여 코드를 작성하는데 부담이 적고, 초기화 메서드가 존재한다는 것을 가시성 좋게 명시할 수 있으므로 가장 권장되는 방식입니다.

import javax.annotation.PostConstruct;

public class Demo {
    @PostConstruct
    public void init() {
        // 빈 초기화 로직 구현
    }
}

 


빈 사용

  • 빈 사용
    초기화가 완료된 빈은 Spring 컨테이너나 애플리케이션에서 사용될 수 있습니다. 다른 빈이나 컴포넌트에서 해당 빈을 주입받아 사용할 수 있습니다.

 


빈 소멸 생명주기 콜백

  • 소멸 콜백
    Spring 컨테이너가 종료되거나 해당 빈이 제거되어야 할 때, 소멸 콜백 메서드가 호출됩니다. 소멸 콜백은 DisposableBean 인터페이스를 구현하거나 destroy-method를 지정하거나 @PreDestroy 어노테이션을 사용하여 정의할 수 있습니다. 소멸 콜백 메서드는 빈이 사용한 리소스를 정리하거나 기타 정리 작업을 수행합니다.

 

@PreDestroy 어노테이션

빈이 소멸되기 전에 호출되어야 하는 메서드에 부여합니다. 즉, 빈이 제거되기 전에 필요한 정리 작업을 수행하는 메서드를 정의할 수 있습니다.

import javax.annotation.PreDestroy;

public class Demo {
    @PreDestroy
    public void cleanUp() {
        // 빈 소멸 전 정리 작업 수행
    }
}