시뻘건 개발 도전기

#3 : Container Life Cycle 본문

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("[컨테이너 설정]");
	}
}

 

  어노테이션을 사용하는 것이 좋을까? 아니면 인터페이스를 상속 받아서 사용하는 것이 좋을까?

반응형

'Framework > spring' 카테고리의 다른 글

#6 : AOP (Aspect Oriented Programming)  (0) 2020.05.03
#5 : bean setting  (0) 2020.05.02
#4 : Bean Scope  (0) 2020.05.01
#2 : DI 활용  (0) 2020.05.01
#1 : spring의 핵심 DI(Dependency Injection)  (0) 2020.04.30
Comments