Framework/spring
#3 : Container Life Cycle
시뻘건 튼튼발자
2020. 5. 1. 22:14
반응형
스프링 컨테이너의 생명 주기에 대해 알아보자.
이전에 작성했던 코드를 다시 한 번들여다 보자.
public static void main(String[] args) {
String config = "classpath:appContext.xml";
GenericXmlApplicationContext appContext = new GenericXmlApplicationContext(config); // 컨테이너 생성
LoggerUtil logger = appContext.getBean("loggerUtil", LoggerUtil.class); // 컨테이너 설정
logger.log(); // 컨테이너 사용
appContext.close(); // 컨테이너 종료
}
컨테이너는 [생성 -> 설정 -> 사용 -> 종료]순으로 이루어진다. 우리는 bean 초기화 될 때, 컨테이너 종료 전에 접근이 가능하다.
다음 인터페이스 상속만 받는다면 충분하다!
- InitializingBean
- DisposableBean
public class LoggerUtil implements InitializingBean, DisposableBean{
//...
@Override
public void destroy() throws Exception {
System.out.println("[컨테이너 반납]");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("[컨테이너 설정]");
}
}
이 방법은 어노테이션으로도 지원한다.
- @PreDestroy
- @PostConstruct
public static void main(String[] args) {
String config = "classpath:appContext.xml";
GenericXmlApplicationContext appContext = new GenericXmlApplicationContext(config);
LoggerUtil logger = appContext.getBean("loggerUtil", LoggerUtil.class);
logger.log();
appContext.close();
}
public class LoggerUtil {
//...
@PreDestroy
public void beforeEnd() {
System.out.println("[컨테이너 반납]");
}
@PostConstruct
public void afterInit() {
System.out.println("[컨테이너 설정]");
}
}
어노테이션을 사용하는 것이 좋을까? 아니면 인터페이스를 상속 받아서 사용하는 것이 좋을까?
반응형