computer_study

[Spring] 06. 빈 라이프사이클과 범위 본문

스터디/스프링5 프로그래밍 입문

[Spring] 06. 빈 라이프사이클과 범위

knowable 2022. 4. 17. 23:51

목차

1. 컨테이너 초기화와 종료

2. 스프링 빈 객체의 라이프사이클

3. 빈 객체의 생성과 관리 범위

1. 컨테이너 초기화와 종료

스프링 컨테이너는 초기화와 종료라는 라이프 사이클을 갖는다.

  • 컨테이너 초기화 -> 빈 객체 생성, 의존 주입, 초기화
  • 컨테이너 종료 -> 빈 객체의 소멸

2. 스프링 빈 객체의 라이프사이클

스프링 컨테이너는 빈 객체의 라이프사이클을 관리하기에, 빈 객체도 생성과 소멸의 라이프 사이클을 갖는다.

객체 생성 -> 의존 설정 -> 초기화 -> 소멸

 

  • 스프링 인터페이스
    • InitializingBean
      • 스프링에서 정의한 초기화 인터페이스
      • afterPropertiesSet() 메소드를 가지고있다.
    • DisposableBean
      • 스프링에서 정의한 소멸 인터페이스
      • destroy() 메소드를 가지고있다.
  • 커스텀 메서드
    • 직접 구현하지 않은 코드 등의 사유로 InitializingBean 인터페이스와 Disposable Bean 인터페이스를 구현할 수 없는 경우 혹은 두 인터페이스를 사용하고 싶지 않은 경우 메서드를 지정하여 사용
    • @Bean 태그에 initMethod 속성과 destroyMethod 속성을 사용해서 초기화, 소멸 메서드의 이름을 지정할 수 있다.
    • 초기화 메서드가 두 번 불리지 않도록 주의해야 한다.
@Bean(initMethod = "connect", destroyMethod = "close")
public Client2 client2(){
    Client2 client = new Client2();
    client.setHost("host");
    return client;
}

//// client2.java//
package spring;

public class Client2{
    private String host;
    
    public void setHost(String host){
        this.host = host;
    }
    
    public void connect(){
    /// 먼저 실행됨
    }
    public void send(){
    }
    public void close(){
    /// 소멸 시 실행됨
    }
}

3. 빈 객체의 생성과 관리 범위

한 식별자에 대해 한 개의 객체만 존재하는 빈을 싱글톤 범위를 갖는다고 한다.

빈의 범위가 프로토타입이라면 메서드는 매번 새로운 객체를 생성해서 리턴해준다.

@Bean
@Scope("prototype")
public Client client(){
    Client client = new Client();
    client.setHost("host");
    return client;
}

// 싱글톤으로 지정하고 싶다면
@Scope("singleton")
// 아니면 default가 싱글톤이기에 작성하지 않는다.

프로토 타입을 사용하면, 컨테이너를 종료한다고 생성한 빈 객체가 소멸하지 않으므로, 코드에서 직접 빈 객체 소멸 처리를 해주어야 한다.

 

'스터디 > 스프링5 프로그래밍 입문' 카테고리의 다른 글

[Spring] 08. DB연동  (0) 2022.04.24
[Spring] 07. AOP 프로그래밍  (0) 2022.04.18
[Spring] 05. 컴포넌트 스캔  (0) 2022.04.09
[Spring] 04. 의존 자동 주입  (0) 2022.04.09
[Spring] 03. 스프링 DI  (0) 2022.03.31
Comments