Backend/Spring

Spring Life Cycle⭐️

해로몬 2024. 11. 15. 16:41

스프링 빈의 라이프사이클

스프링 빈의 라이프사이클은 크게 다음과 같은 단계로 나뉩니다.

  1. 객체 생성: 스프링 컨테이너는 빈 정의에 따라 객체를 생성합니다. 이 단계에서는 빈의 생성자가 호출되어 객체가 메모리에 할당됩니다.
  2. 의존성 주입: 생성된 빈에 대해 의존성을 주입합니다. DI에 따라 필요한 의존성들이 생성자 주입, Setter 주입, 또는 필드 주입을 통해 주입됩니다.
  3. 초기화(Initialization): 빈이 설정되면 초기화 과정이 시작됩니다. 초기화 메서드는 @PostConstruct 어노테이션이나 init-method 속성으로 지정할 수 있습니다. 이 단계에서 빈이 필요한 준비 작업을 수행하여 사용할 준비가 됩니다.
  4. 사용: 빈은 사용 가능한 상태로 애플리케이션에서 제공하는 서비스를 수행합니다. 이 단계에서는 빈이 애플리케이션 내에서 비즈니스 로직을 처리하는 데 사용됩니다.
  5. 소멸(Destruction): 스프링 컨테이너가 종료되거나 빈이 더 이상 필요하지 않게 되면 소멸 단계로 이동합니다. @PreDestroy 어노테이션이나 destroy-method 속성을 통해 소멸 메서드를 지정할 수 있습니다. 소멸 메서드는 자원 해제 및 정리 작업을 수행합니다.
      • 스프링 IoC 컨테이너는 빈의 라이프사이클을 전적으로 관리하며, 필요한 메서드를 실행하거나 콜백을 호출하여 초기화 및 소멸 과정을 처리합니다.

>>@PostConstruct와 @PreDestroy 어노테이션을 사용하여 초기화 및 소멸 과정을 지정하는 예제

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class ExampleBean {
    public ExampleBean() {
        System.out.println("ExampleBean 생성자 호출");
    }

    @PostConstruct
    public void init() {
        System.out.println("ExampleBean 초기화 메서드 호출");
    }

    public void performTask() {
        System.out.println("ExampleBean의 비즈니스 로직 수행");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("ExampleBean 소멸 메서드 호출");
    }
}

 

스프링 빈 라이프사이클 콜백 설정 방법

빈의 초기화와 소멸 과정에서 콜백 메서드를 설정할 수 있습니다. 스프링은 초기화와 소멸을 위해 다양한 방법을 제공합니다.

  1. InitializingBean과 DisposableBean 인터페이스 구현:
    • InitializingBean 인터페이스의 afterPropertiesSet() 메서드를 통해 초기화 작업을 설정할 수 있습니다.
    • DisposableBean 인터페이스의 destroy() 메서드를 통해 소멸 작업을 설정할 수 있습니다.
  2. @PostConstruct와 @PreDestroy 어노테이션 사용:
    • @PostConstruct: 빈의 초기화 메서드를 지정합니다.
    • @PreDestroy: 빈의 소멸 메서드를 지정합니다.
  3. XML 설정 파일의 init-method와 destroy-method 속성:
    • XML 설정에서 <bean> 태그의 init-method와 destroy-method 속성을 통해 초기화 및 소멸 메서드를 지정할 수 있습니다.

 

빈 스코프와 객체 관리

스프링에서 빈은 **싱글톤(Singleton)**이 기본 스코프로 설정되지만, 여러 가지 스코프를 제공하여 객체 관리 방식을 다르게 할 수 있습니다.

  • 싱글톤(Singleton): 스프링 컨테이너 내에서 빈을 한 번만 생성하여 모든 요청에서 같은 인스턴스를 사용합니다. 애플리케이션 내에서 공유가 필요한 빈에 적합합니다.
  • 프로토타입(Prototype): 빈이 요청될 때마다 새 인스턴스를 생성합니다. 상태를 가지는 객체에 적합하며, 매번 다른 인스턴스가 필요할 때 사용합니다.
  • Request/Session/GlobalSession: 웹 애플리케이션에서 HTTP 요청, 세션, 전역 세션별로 각각 다른 빈을 생성하는 스코프입니다. 일반적으로 웹 환경에서 사용됩니다.

 

관련 자료

'Backend > Spring' 카테고리의 다른 글

@Autowired  (1) 2024.11.15
Bean Scope  (0) 2024.11.15
'XML 기반' VS 'Java Config 기반'  (0) 2024.11.15
IoC(Inversion of Control) : 제어의 역전  (0) 2024.11.14
라이브러리와 프레임워크  (0) 2024.11.14