Web容器启动时加载Spring
来源:互联网 发布:梦幻西游2抓鬼经验算法 编辑:程序博客网 时间:2024/06/10 04:58
在应用程序web.xml中做了以下配置信息时,当启动Web容器时就会自动加载Spring容器。
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
ContextLoaderListener类实现了javax.servlet.ServletContextListener接口并且继承了org.springframework.web.context.ContextLoader类。ServletContextListener事件类是Web容器的一部分,处理Web应用的Servlet上下文(context)的监听。实现ServletContextListener接口中的contextInitialized和contextDestroyed方法。当Web容器启动时会自动调用contextInitialized方法,进行初始化Spring Web应用程序上下文,主要加载web.xml中contextConfigLocation的配置文件;当Web容器关闭之前会调用contextDestroyed方法,进行销毁Spring Web应用程序上下文。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; } }
- Web容器启动时加载Spring
- Web容器启动时加载Spring分析
- Web容器启动时加载Spring的配置
- web容器启动spring容器
- web容器启动Spring
- WEB启动时,如何加载spring容器和struts2容器(bean的注入和url如何请求)
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(优先初始化Spring IOC容器)
- Tomcat启动时加载数据到缓存--Web.xml里listener的加载顺序,优先初始化Spring IOC容器
- web项目启动Spring容器
- Web容器 与Spring容器 启动
- spring在web容器启动时执行初始化方法
- spring在web容器启动时执行初始化方法
- spring在web容器启动时执行初始化方法
- Spring MVC让Web容器启动时自动执行代码
- spring在web容器启动时执行初始化方法
- spring 在web容器启动时执行初始化方法
- spring在web容器启动时执行初始化方法
- spring在web容器启动时执行初始化方法
- Remember Steve Jobs
- Android Bander设计与实现 - 设计篇
- 【转】阿里云2011.9.17招聘会笔试题
- C语言的特点
- 【乔布斯05年斯坦福大学毕业典礼上的演讲】
- Web容器启动时加载Spring
- 如何删除开发用户的开发Key
- 在百度上回答的一个问题,修改之后 JS倒计时
- imp数据导入工具用法!!!
- C语言写的流氓关机程序及破解
- 通过汉字得到首字母
- 线索二叉树
- Linux中查看各文件夹大小命令du -h --max-depth=1 Linux同目录文件夹大小 Linux目录大小 Linux du命令实例
- 线程初步