1、IntrospectorCleanupListener
IntrospectorCleanupListener应该注册为web.xml中的第一个Listener,在任何其他Listener之前注册。 该监听器在web.xml中的配置如下:
<listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener>
在Web应用程序关闭时IntrospectorCleanupListener将会刷新JDK的JavaBeans的Introspector缓存。在你的web.xml中注册这个listener来确保Web应用程序的类加载器以及其加载的类正确的释放资源。
如果JavaBeans的Introspector已被用来分析应用程序类,系统级的Introspector缓存将持有这些类的一个硬引用。因此,这些类和Web应用程序的类加载器在Web应用程序关闭时将不会被垃圾收集器回收!而IntrospectorCleanupListener则会对其进行适当的清理,已使其能够被垃圾收集器回收。
2、Log4jConfigListener
Spring提供了一个Log4jConfigListener,本身就能通过web.xml中配置来指定位置加载log4j配置文件和log输出路径,但是该 listener需要放在spring的Listener之前。
使用spring中的Log4jConfigListener有如如下好处:
1、动态的改变日志级别和策略,不需要重启Web应用。
2、把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。
系统把web目录的路径压入一个叫webapp.root的系统变量,日志保存路径就可以用相对路径了
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/monia.log
3、可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。
4、log4jRefreshInterval为6000表示开一条watchdog线程每6秒扫描一下配置文件的变化。
在web.xml文件中添加如下配置:
<!-- 当同一个应用服务器中部署两个以上用到Log4jConfigListener的应用时,需要通过该参数加以区别 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>some.web.root</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
3、WebAppRootListener
这个监听器就会在web上下文初始化的时候,调用webUtil的对应方法,首先获取到param-name对应的param-value,然后根据传递进去的ServletContext对象得到web的物理路径:String root = servletContext.getRealPath("/");接着把这个param-value作为key,root作为value放到system中System.setProperty(key, root);然后在web中可以用 System.get.....就可以得到web的跟目录的物理路径了。
监听web.xml中的配置para-name为webAppRootKey的值,
<context-param> <param-name>webAppRootKey</param-name> <param-value>some.web.root</param-value> </context-param>
再配置该监听器
<listener> <listener-class>org.springframework.web.util.WebAppRootListener</listener-class> </listener>
如果在web.xml中已经配置了Log4jConfigListener监听器,则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能。
4、ContextLoaderListener
启动Web容器时,自动装配ApplicationContext的配置信息。该监听器在web.xml中的配置如下:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
如果在web.xml中不写任何参数配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml;如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/applicationContext-*.xml, claaspath:/applicationContext-*.xml </param-value> </context-param>
5、RequestContextListener
在Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和global session。
Request作用域:
针对每次HTTP请求,Spring容器都会创建一个全新的bean实例,且该bean实例仅在当前HTTP request内有效。当处理请求结束,request作用域的bean实例将被销毁。
Session作用域:
针对某个HTTP Session,Spring容器会创建一个全新的bean实例,且该bean仅在当前HTTP Session内有效。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。
global session作用域:
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。
作用域依赖问题:如果将Web相关作用域的Bean注入到singleton或prototype的Bean中,这种情况下,需要Spring AOP
<bean name="car" class="com.demo.Car" scope="request"> <aop:scoped-proxy/> </bean> <bean id="boss" class="com.demo.Boss" > <properrty name="car" ref="car" /> </bean>
如果想让容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始化配置。该监听器在web.xml中的配置如下:
<listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener>
相关推荐
在Spring框架中,监听器和缓存是两个重要的概念,它们在系统运行时起到关键的作用。监听器允许我们对Web应用程序的生命周期事件进行监听和处理,而缓存则用于优化性能,减少数据库交互。 首先,让我们关注监听器。...
在Spring boot中通过HttpSessionListener监听器统计在线人数是一种常见的技术实现方式,适用于需要跟踪和管理用户会话状态的Web应用程序。以下是从给定文件中提炼的关键知识点。 首先,了解HttpSessionListener接口...
本篇文章将详细介绍Spring事件监听的三种方式:基于接口的监听器、基于类的监听器以及基于注解的监听器。 ### 1. 基于接口的监听器(ApplicationListener) **接口定义:** Spring提供了`ApplicationListener`接口...
Spring监听器是Spring框架中的一个重要组成部分,主要用于监听和响应应用上下文或Bean的生命周期事件。在Spring中,监听器是通过实现特定接口或者继承抽象类来定义的,这些接口包括ApplicationContextAware、...
6. **spring-web.jar** 和 **spring-webmvc.jar**:前者提供了HTTP请求的处理,如Servlet监听器、过滤器等;后者是Spring MVC,用于构建Web应用,提供模型-视图-控制器架构,支持RESTful风格的URL路由、数据绑定、...
9. **Spring Web**:该模块提供了创建基于HTTP请求的应用程序的支持,如Servlet监听器、过滤器等,是Spring MVC的基础。 10. **Spring Test**:测试支持模块,包含JUnit和TestNG集成,方便进行单元测试和集成测试。...
Spring 的监听器 ContextLoaderListener 的作用 ContextLoaderListener 是 Spring 框架中的一种监听器,它的主要作用是启动 Web 容器时,自动装配 ApplicationContext 的配置信息。它实现了 ServletContextListener...
本文将对Spring监听器进行深入浅析,包括其工作原理、源码解析以及如何使用。 首先,Spring监听器是基于事件驱动模型的,这种模式在多线程和分布式系统中非常常见。在Spring中,当一个特定的事件发生时,如bean的...
6. **spring-web.jar**:Web模块提供了将Spring应用与Web环境集成的能力,包括Servlet监听器、过滤器和控制器。它是构建Spring MVC的基础。 7. **spring-webmvc.jar**:Spring MVC模块,提供了模型-视图-控制器架构...
Spring监听器及定时任务实现方法详解 在本文中,我们将详细介绍Spring监听器及定时任务实现方法的详解。通过示例代码,我们将展示如何使用Spring监听器和定时任务来实现批处理任务的执行。 Spring监听器 在Spring...
6. **spring-web.jar**:提供了与Web相关的功能,如Servlet监听器、过滤器,以及HTTP客户端支持。 7. **spring-webmvc.jar**:Spring MVC是Spring Web模块的一部分,是一个模型-视图-控制器框架,用于构建Web应用...
8. **spring-web**和**spring-webmvc**:前者是Spring Web应用的基础,处理HTTP请求和响应,提供Servlet监听器和过滤器。后者是Spring MVC,是构建Web应用的模型-视图-控制器框架,支持RESTful风格的URL映射、视图...
在Spring Boot框架中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们可以帮助我们实现一些自定义的处理逻辑,如数据校验、日志记录、请求拦截等。下面将详细讲解这两个概念及其在实际开发中的...
【Spring在Web项目中的应用】 ...同时,通过监听器`ContextLoaderListener`,可以在Web容器启动时自动加载Spring配置,确保在整个Web应用程序生命周期中,Service层和其他Spring管理的bean都可以正确地被创建和管理。
在Spring框架中,ApplicationEvent和监听器是实现应用内异步通信的重要机制。这个测试Demo主要展示了如何在Spring环境中创建自定义事件、发布事件以及注册和处理这些事件。以下是对这个测试工程的详细解析: 首先,...
### Spring监听器与过滤器详解:关键代码与实践应用 #### 标题解析与核心概念 标题“spring监听器”指向了Spring框架中一个重要的组件——监听器(Listener)。Spring框架不仅在Java企业级开发中提供了强大的依赖...
在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(ApplicationListener)和事件广播器(ApplicationEventMulticaster)。接下来我们将深入探讨这些概念以及如何在实际应用中使用它们。...
使用@EventListener注解也可以轻松地实现事件监听器,Spring框架将自动扫描带有该注解的类,并将其添加到ApplicationContext中。在上面的代码中,使用@EventListener注解的MyEventHandler类将被Spring框架自动添加到...