Backend/Spring

ContextLoaderListener란

Mev01 2022. 10. 21. 22:30

리스너란

리스너는 수많은 이벤트 소스들로부터 이벤트가 발생하기를 기다리는(귀 기울여 청취하는) 컴포넌트(함수나 객체)입니다. Java에서 리스너는 객체가 되며, 특정 이벤트가 발생했을 때 실행되는(이벤트를 처리할) 메서드를 가지고 있습니다.
출처: https://dololak.tistory.com/616 [코끼리를 냉장고에 넣는 방법:티스토리]

 

 

ContextLoaderListener 상속 구조

 

 

ServletContextListener

이벤트 리스너 이벤트 소스 발생 이벤트 객체 설명
ServletContextListener ServletContext ServletContextEvent 웹어플리케이션의 시작, 종료 이벤트에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 ServletContext에 대한 참조를 얻을 수 있습니다.

 

 

ContextLoaderListener란

Bootstrap listener to start up and shut down Spring's root WebApplicationContext
출처: springframework docs
The purpose of the ContextLoaderListener is two-fold:
1. to tie the lifecycle of the ApplicationContext to the lifecycle of the ServletContext
2. to automate the creation of the ApplicationContext, so you don't have to write explicit code to do create it - it's a convenience function.
출처: stackoverflow

 

이를 요약하면 ContextLoaderListener는 ServletContext와 연결된 생명주기를 가지는 WepApplicationContext를 생성하고 종료한다.

 

또 ContextLoaderListener는 옵션으로 각 servlet들이 공유하는 ApplicationContext가 필요할때 생성한다. 하나의 servlet을 사용하는 때에는 생성하지 않아도 된다.

 

 

ContextLoaderListener 동작

public class ContextLoaderListener extends ContextLoader implements ServletContextListener {
	/**
	 * Initialize the root web application context.
	 */
	@Override
	public void contextInitialized(ServletContextEvent event) {
		initWebApplicationContext(event.getServletContext());
	}

	/**
	 * Close the root web application context.
	 */
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		closeWebApplicationContext(event.getServletContext());
		ContextCleanupListener.cleanupAttributes(event.getServletContext());
	}

}

ServletContextListener의 contextInitialized(), contextDestroyed() 메서드를 오버라이딩하여

ServletContext를 가지고 WebApplicationContext 시작/종료

 

 

References


Listener와 ServletContextListener