千家信息网

如何进行ContextLoaderListener分析

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,如何进行ContextLoaderListener分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。每一个整合spring框架的项目中,
千家信息网最后更新 2025年12月02日如何进行ContextLoaderListener分析

如何进行ContextLoaderListener分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

每一个整合spring框架的项目中,总是不可避免地要在web.xml中加入这样一段配置。



contextConfigLocation

classpath*:conf/applicationContext.xml




org.springframework.web.context.ContextLoaderListener


但是很多同学并不清楚它到底有什么作用。
web.xml的配置文件,在启动Web 容器时,自动装配Spring applicationContext.xml
的配置信息。
我们研究一下ContextLoaderListener源码。
ContextLoaderListener继承自ContextLoader,实现的是ServletContextListener接口。
public class ContextLoaderListener extends ContextLoader implements 
ServletContextListener {
public ContextLoaderListener() {}
public ContextLoaderListener(WebApplicationContext context) { super(context); } public void contextInitialized(ServletContextEvent event) { this.initWebApplicationContext(event.getServletContext()); } public void contextDestroyed(ServletContextEvent event) { this.closeWebApplicationContext(event.getServletContext()); ContextCleanupListener.cleanupAttributes(event.getServletContext()); }
}
ContextLoaderListener可以指定在Web应用程序启动时载入Ioc容器,正是通过
ContextLoader来实现的,ContextLoader来完成实际的WebApplicationContext,
也就是Ioc容器的初始化工作。

ContextLoaderListener的作用就是启动Web容器时,读取在contextConfigLocation中定义的xml文件,自动装配ApplicationContext的配置信息,并产生WebApplicationContext对象,然后将这个对象放置ServletContext

的属性里,这样我们只要得到Servlet就可以得到WebApplicationContext对象,并利用这个对象访问spring容器管理的bean。简单来说,就是上面这段配置为项目提供了spring支持,初始化了Ioc容器。

在上下文创建时调用的方法是public void contextInitialized(ServletContextEvent event)。它通过传递给它所接收到的servlet上下文(从事件参数获取event.getServletContext())来调用ContextLoader的initWebApplicationContext方法。initWebApplicationContext方法进行的第一个操作是检查是否有另一个根上下文存在。如果至少存在另一个,则抛出IllegalStateException,并且初始化失败。否则,它继续初始化

org.springframework.web.context.WebApplicationContext实例。如果初始化的实例实现了ConfigurableWebApplicationContext接口,则在设置当前应用程序上下文之前,加载器将进行一些设置服务(父上下文,应用程序上下文,servlet上下文等),并通过上下文的refresh()方法来准备bean

ContextLoaderListener中第二个我们需要关注的方法是public void contextDestroyed(ServletContextEvent event)。每当加载程序的上下文关闭时都会调用它。这个方法干了两件事情:

  • 通过ContextLoader中的closeWebApplicationContext(),它关闭应用程序上下文。通过ConfigurableWebApplicationContext close()方法完成上下文关闭。上下文的销毁的过程其实就是销毁bean和关闭bean工厂,此处参考org.springframework.context.support.AbstractApplicationContext中的源码。

  • 调用

    ContextCleanupListener.cleanupAttributes(event.getServletContext()),它将查找当前servlet上下文的所有实现org.springframework.beans.factory.DisposableBean接口的对象。之后,将调用它们的destroy()方法,以销毁不再使用的bean。

ServletContextListener 是 ServletContext 的监听者,如果 ServletContext

发生变化,如服务器启动时ServletContext 被创建,服务器关闭时

ServletContext 将要被销毁。

ServletContext 被 Servlet 程序用来与 Web 容器通信。例如写日志,转发请求。每一个 Web 应用程序含有一个Context ,被Web 应用内的各个程序共享。因为Context 可以用来保存资源并且共享,所以我所知道ServletContext

的最大应用是Web 缓存---- 把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O 了。

在JSP 文件中,application 是 ServletContext 的实例,由JSP 容器默认创建。Servlet 中调用getServletContext() 方法得到 ServletContext 的实例。

我们使用缓存的思路大概是:

1. 服务器启动时,ServletContextListener 的 contextInitialized() 方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 ervletContext.setAttribute() 方法将缓存类保存在ServletContext 的实例中。

2. 程序使用 ServletContext.getAttribute() 读取缓存。如果是 JSP ,使用a pplication.getAttribute() 。如果是Servlet ,使用 getServletContext().getAttribute() 。如果缓存发生变化( 如访问计数) ,你可以同时更改缓存和文件/ 数据库。或者你等 变化积累到一定程序再保存,也可以在下一步保存。

3. 服务器将要关闭时,ServletContextListener 的 contextDestroyed() 方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。

看完上述内容,你们掌握如何进行ContextLoaderListener分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

方法 上下 上下文 程序 缓存 容器 应用 文件 服务 内容 实例 对象 应用程序 服务器 配置 就是 接口 数据 数据库 变化 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 疾风之刃服务器连接不上 用网站做我的世界服务器 ibm服务器安装操作系统 软件开发技术服务值得推荐 数据库系统e-r图 数据库中模式r的基本fd 网络安全技术课程论文报告 查看sql数据库版本的方法 csmar数据库怎么导出 网络运营商对于网络安全 网络安全体系日常生活 宝山区参考软件开发联系方式 u盘如何做服务器系统启动盘 如何挑选云服务器提供商 hp服务器 保修 查询 linux设置数据库实例 软件开发关键业务是什么 菏泽戴尔服务器代理销售电话 服务器百万兆网卡 我想进国家网络安全局 学网络安全要学英语 sql多表查询并更新数据库 没有学历如何自学软件开发 连上数据库查不到数据 北京网络安全培训机构有哪些 长沙市开福软件开发产业园 网络安全426讲话 在哪里找到服务器和端口并填写 05年的服务器读不出硬盘 郑州网络安全科技馆的意义
0