본문 바로가기

공부/Spring

[Spring] Chapter 06 - 빈라이클사이클과 범위

Chapter 6 내용

  • 컨테이너 초기화와 종료
  • 빈 객체의 라이프 사이클

 

컨테이너 초기화와 종료


 

 

 

 

 스프링 컨테이너는 "객체 생성 -> 의존 설정 -> 초기화 -> 소멸"에 걸쳐서  빈 객체의 라이프 사이클을 관리한다.

 

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

 

 

빈 객체를 초기화, 소멸 메서드


 

빈 객체를 초기화하고 소멸하기 위해 빈 객체의 지정한 메서드를 호출한다.

 

1. InitializingBean

2. DisposableBean

 

public interface InitializingBean{
 void afterPropertiesSet() throws Exception; //스프링 초기화 과정
}

public interface DisposableBean{
  void destroy() throws Excepion; // 소멸 과정
}

 

InitailizingBean 인터페이스와 DisposableBean 인터페이스를 구현해  언제 실행하는지 확인할 수 있다.

 

public class Client implements InitializingBean, DisposableBean {

    private String host;
    public void setHost(String host) {
        this.host = host;
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet");
    }

    public void send() {
        System.out.println("test" + host);
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("destroy");
    }

}

 

자바 설정 파일에 Client 객체를 생성해서 빈으로 등록한다.

 

public class Main {
    public static void main(String[] args) throws IOException {
        AbstractApplicationContext ctx =
                new AnnotationConfigApplicationContext(AppCtx.class);

        Client client = ctx.getBean(Client.class);
        client.send();
        ctx.close();
    }
}

 

[결과] afterPropertiesSet() -> setHost() -> destory()순으로 실행된다.

 

close()를 실행하지 않으면 컨테이너의 종료 과정을 수행하지 않아 빈 객체의 소멸 과정 destroy를 실행하지 않는다.

 

빈 객체의 초기화와 소멸 : 커스텀 메서드


 직접 구현한 클래스가 아닌 외부에서 제공받은 클래스를 스프링 빈 객체로 설정하고 싶다면?

- @bean 태그에서 initMethod 속성과 destroyMethod 속성을 사용, 초기화 메서드와 소멸 메스드의 이름을 지정한다.

 

 

** 빈 등록

	@Bean(initMethod = "connect", destroyMethod = "close")
  
	public Client2 client2() {
		Client2 client = new Client2();
		client.setHost("host");
		return client;
	}

 

 

REFERENCE


 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문(최범균)

300x250