Spring:ContextLoaderListener

本文深入解析了ContextLoaderListener的工作原理,包括如何加载和关闭Spring根上下文,以及它如何通过servletContext.getResource()方法实现对WebApplicationContext的初始化与销毁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        ContextLoaderListener实现了servletContextListener接口,用来加载和关闭spring根上下文。它根据WebApplicationContext来创建一个实例,同时会将该上下文注册进ServletContext,并且它的生命周期方法会被该Listener调用,也就是Listener会监听其生命周期,而由于一个每个web应用只有一个context,所以也就是监听应用的生命周期。

ContextLoaderListener配置在web.xml中,因为当项目启动时,服务器会先读取web.xml文件中的配置,没有出错项目才会启动起来,所以配置文件的路径也要声明:

创建Listener:

通过servletContext.getResource()方法获得ServletContext类的实例,来初始化Spring web应用的上下文,ServletContextEvent用来通知servlet上下文发生变化。首先判断WebApplicationContext的ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE是否为null,不为null说明已经有了一个上下文,不能在初始化了;为null则进行初始化的过程,首先要通过servlet获得应用的context类,再注册进前面的那个attribute,如果当前线程的contextClassLoader是ContextLoader类的类加载器的一个实例,则当前的上下文就是刚创建的上下文,否则就要把类加载器和该上下文类放入Map中,形成对应的线程上下文和线程的上下文加载器之间的映射关系:

通过servletContext.getResource()方法获得一个ServletContext类的实例,来关闭Spring web应用上下文,清除映射关系,同时清除属性,因为创建Listener时传入的上下文在注册进servlet context时是以属性名注册的:

closeWebApplicationContext方法中:

WebApplicationContext用来给一个web应用提供配置,主要是让根context一定是在启动进程中。

上面的属性用来在成功启动的时候将WebApplication绑定到Context属性名;如果启动失败该属性名会包含相关错误信息。

ServletContext接口定义了一系列的方法用于让servlet和它的servlet容器进行通信,例如获取文件的MIME类型,分发request,写log文件等等。

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷福。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值