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
'공부 > Spring' 카테고리의 다른 글
[Spring] Chapter 08 - DB 연동(MySQL + Gradle + JDBC) (0) | 2021.07.03 |
---|---|
[Spring] Chapter 07 - Spring AOP (0) | 2021.06.13 |
[Spring] Chapter 05 - 컴포넌트 스캔 (0) | 2021.06.13 |
[Spring] Chapter 04 - 의존 자동 주입 (0) | 2021.06.13 |
[Spring] Chapter 03 - 스프링 DI(Dependency Injection) (0) | 2021.06.13 |