웹 용기 시작 시 Spring 불 러 오기

응용 프로그램 웹. xml 에서 다음 설정 정 보 를 만 들 었 을 때 웹 용 기 를 시작 할 때 Spring 용 기 를 자동 으로 불 러 옵 니 다.
<listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

ContextLoader Listener 류 는 javax. servlet. servlet ContextListener 인 터 페 이 스 를 실현 하고 org. springframework. web. context. contextLoader 류 를 계승 했다.ServletContextListener 이벤트 클래스 는 웹 용기 의 일부분 으로 웹 애플 리 케 이 션 의 Servlet 컨 텍스트 (context) 감청 을 처리 합 니 다.ServletContextListener 인터페이스 에 있 는 contextInitialized 와 contextDestroyed 방법 을 실현 합 니 다.웹 용기 가 시 작 될 때 contextInitialized 방법 을 자동 으로 호출 하여 Spring 웹 응용 프로그램의 컨 텍스트 를 초기 화 합 니 다. 주로 웹. xml 에 있 는 contextConfigLocation 설정 파일 을 불 러 옵 니 다.웹 용기 가 닫 히 기 전에 contextDestroyed 방법 을 사용 하여 Spring 웹 프로그램 컨 텍스트 를 소각 합 니 다.ContextLoader 류 는 Spring 컨 텍스트 를 초기 화 하 는 작업 을 실 현 했 습 니 다. initWebapplicationContext 방법 을 실행 하여 WebapplicationContext 로 돌아 갑 니 다.Spring 에서 실 현 된 contextInitialized 와 contextDestroyed 코드 는 다음 과 같 습 니 다.
public void contextInitialized(ServletContextEvent event) {

       this.contextLoader = createContextLoader();

       if (this.contextLoader ==null) {

           this.contextLoader = this;

       }

    this.contextLoader.initWebApplicationContext(event.getServletContext());

    }

 

public void contextDestroyed(ServletContextEvent event) {

       if (this.contextLoader !=null) {      
    this.contextLoader.closeWebApplicationContext(event.getServletContext());
   }

    ContextCleanupListener.cleanupAttributes(event.getServletContext());
}
 

Spring 은 Spring 컨 텍스트 를 실현 하 는 방법 을 실행 합 니 다.
public WebApplicationContext initWebApplicationContext(ServletContext servletContext) {

        if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) !=null) {

            throw new IllegalStateException(

                    "Cannot initialize context because there is already a root application context present - " +

                    "check whether you have multiple ContextLoader* definitions in your web.xml!");

        }

 

        Log logger = LogFactory.getLog(ContextLoader.class);

        servletContext.log("Initializing Spring root WebApplicationContext");

        if (logger.isInfoEnabled()) {

            logger.info("Root WebApplicationContext: initialization started");

        }

        long startTime = System.currentTimeMillis();

 

        try {

            // Store context in local instance variable, to guarantee that

            // it is available on ServletContext shutdown.

            if (this.context ==null) {

                this.context = createWebApplicationContext(servletContext);

            }

            if (this.context instanceof ConfigurableWebApplicationContext) {

                configureAndRefreshWebApplicationContext((ConfigurableWebApplicationContext)this.context, servletContext);

            }

            servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,this.context);

 

            ClassLoader ccl = Thread.currentThread().getContextClassLoader();

            if (ccl == ContextLoader.class.getClassLoader()) {

                currentContext = this.context;

            }

            else if (ccl != null) {

                currentContextPerThread.put(ccl, this.context);

            }

 

            if (logger.isDebugEnabled()) {

                logger.debug("Published root WebApplicationContext as ServletContext attribute with name [" +

                        WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE + "]");

            }

            if (logger.isInfoEnabled()) {

                long elapsedTime = System.currentTimeMillis() - startTime;

                logger.info("Root WebApplicationContext: initialization completed in " + elapsedTime + " ms");

            }

 

            return this.context;

        }

        catch (RuntimeException ex) {

            logger.error("Context initialization failed", ex);

            servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, ex);

            throw ex;

        }

        catch (Error err) {

            logger.error("Context initialization failed", err);

            servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, err);

            throw err;

        }

    }

좋은 웹페이지 즐겨찾기