必威体育Betway必威体育官网
当前位置:首页 > IT技术

ContextLoaderListener 初始化过程.

时间:2019-08-19 12:43:01来源:IT技术作者:seo实验室小编阅读:58次「手机版」
 

contextloaderlistener

ServletcontextListener 生命周期

昨用:

监听 ServletContext 对象被创建或销毁的 Servlet 监听器,

在当前 WEB 应用被加载时对当前 WEB 应用的相关资源进行初始化操作:

如: 创建数据库连接池,创建Spring 的 IOC 容器,读取当前 WEB 应用的初始化参数等

配置:

在web.xml中进行配置:

<listener>
  <listener-class>com.java.javaweb.test.HelloServletContextListener</listener-class>
</listener>
生命周期:

contextInitialized: 在容器启动时被调用(在servlet被实例化前执行)

contextDestroyed: 在容器销毁时调用(在servlet被销毁后执行)


首先contextloaderlistener接口是一个ServletContextListener

ContextLoaderListener 接口定义如下

public class ContextLoaderListener extends ContextLoader implements ServletContextListener {
    public ContextLoaderListener(WebAPPlicationContext context) {
        super(context);
    }
    @Override
    public void contextInitialized(ServletContextEvent event) {
        initwebapplicationContext(event.getServletContext());
    }
    @Override
    public void contextDestroyed(ServletContextEvent event) {
        closeWebApplicationContext(event.getServletContext());
        ContextCleanupListener.cleanupAttributes(event.getServletContext());
    }
}

名词解释:
1.serveltContext:

存储当前Web程序的上下文信息, 每个Engine有多个war包, 每个war包就是一个web应用程序, 每个web应用程序只有一个Context上下文,这就是servletContext.

每个servletcontext下可以有多个servlet, 每个servlet需要有配置url映射. 每个servlet需要被包装为Standardwrapper类, 存储到servletcontext容器中.

ServletContext 对象是一个为整个 web 应用提供共享的内存,多个servlet实例见可以通过context进行通信.

ServletContext 在tomcat中对应的类是ApplicationContext.

2.serveltConfig:

在tomcat中, ApplicationContext的装饰类ApplicationContextFacade即为config,

3.XmlWebApplicationContextSpring

在Spring 中, ContextLoaderListener监听器初始化的时候被创建, 并存入其静态属性ContextLoaderListener.currentContext属性中. 其是整个spring框架执行的基础, 内部包含IOC容器, 关联Servlet上线文等信息

4.DefaultListableBeanFactory

Spring的核心模块,其就是IOC容器.

5.StandardContext

存在于Tomcat中, 是Host的子容器,是Web程序运行的所有servlet的容器, 管理整个web程序的生命周期.

这里写图片描述

这里写图片描述


ContextLoaderListener的启动过程:

ContextLoaderListener实现了ServletContextListener接口,ServletContextListener是Java EE标准接口之一,

类似tomcat,jetty的java容器启动时便会触发该接口的contextInitialized。

下面以Tomcat容器为例:

Tomcat最后一级容器为StandardContext, 在此容器中完成Listener监视器的实例化和初始化, 然后完成filter的初始化, 接着是所有配置load on start标签的servlet的实例化和初始化.

在ContextLoaderListener监视器初始化时首先调用方法.contextInitialized(), 该方法的参数是ServletContextEvent类型,该类包含真是的ServletContext对象.

这里写图片描述

1 所以第一步是启动方法 org.springframework.web.context.ContextLoaderListener#contextInitialized,注意传递进来的事件ServletContextEvent,

2.调用org.springframework.web.context.ContextLoader#initWebApplicationContext初始化监听器

3.org.springframework.web.context.ContextLoader#createWebApplicationContext(javax.servlet.ServletContext)

实例化XmlWebApplicationContext, 并赋值给ContextLoaderListener.context属性

4.调用configureAndRefreshWebApplicationContext方法

4.1 将SevletContext对象赋值给xmlWebApplication.servletContext属性

5.调用XmlWebApplicationContext.refresh方法, 重新载入所有bean

6.挡圈创建的webapplication保存到serletContext属性中,键值名为:.ROOT

6.记录XmlWebApplicationContext到静态属性 ContextLoaderListener.currentContext属性中, 这样全局webapplicationcontext就被永久记录下来了

7.xmlwebApplicationContext被以键值”org.springframework.web.context.WebApplicationContext.ROOT”存储在servletCotext属性中.

时间轴:

这里写图片描述

相关阅读

CURL无法初始化curl_init()

1、开启php.ini 配置文件中的:extension=php_curl.dll2、如果开启扩展后仍然无法初始化找到php目录下:libeay32.dllssleay32.dllphp

内核模块的初始化module_init

关于模块的初始化网上讲解的有很多,但是有些讲的不是特别全面,有些讲的不是特别的深入,所以我在博客上找了一些可以供参考的,给大家同

数组的三种初始化方式

1.静态初始化   除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。            例

ContextLoaderListener介绍

在给新同事培训Spring MVC时,有人问:可以不配置ContextLoaderListener吗所谓ContextLoaderListener,就是在web部署描述符即web.xml里

初始化 ManagementObjectSearcher 类的一个新实例,它用

using System; using System.Management; public class Sample { public static void Main(string[] args) {

分享到:

栏目导航

推荐阅读

热门阅读