`
raymond.chen
  • 浏览: 1426292 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring常用的监听器

 
阅读更多

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 事件监听 3种方式

    本篇文章将详细介绍Spring事件监听的三种方式:基于接口的监听器、基于类的监听器以及基于注解的监听器。 ### 1. 基于接口的监听器(ApplicationListener) **接口定义:** Spring提供了`ApplicationListener`接口...

    Spring boot通过HttpSessionListener监听器统计在线人数的实现代码

    主要介绍了Spring boot通过HttpSessionListener监听器统计在线人数的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    spring监听器共20页.pdf.zip

    Spring监听器是Spring框架中的一个重要组成部分,主要用于监听和响应应用上下文或Bean的生命周期事件。在Spring中,监听器是通过实现特定接口或者继承抽象类来定义的,这些接口包括ApplicationContextAware、...

    Spring常用的jar包.rar

    6. **spring-web.jar** 和 **spring-webmvc.jar**:前者提供了HTTP请求的处理,如Servlet监听器、过滤器等;后者是Spring MVC,用于构建Web应用,提供模型-视图-控制器架构,支持RESTful风格的URL路由、数据绑定、...

    spring常用架包

    9. **Spring Web**:该模块提供了创建基于HTTP请求的应用程序的支持,如Servlet监听器、过滤器等,是Spring MVC的基础。 10. **Spring Test**:测试支持模块,包含JUnit和TestNG集成,方便进行单元测试和集成测试。...

    Spring的监听器ContextLoaderListener的作用

    Spring 的监听器 ContextLoaderListener 的作用 ContextLoaderListener 是 Spring 框架中的一种监听器,它的主要作用是启动 Web 容器时,自动装配 ApplicationContext 的配置信息。它实现了 ServletContextListener...

    spring的监听器和缓存.docx

    @Slf4j public class MyListener implements ServletContextListener { ​ @Override public void contextInitialized(ServletContextEvent sce) { log.info("web项目的启动{} 一开始就启动",sce....

    Web项目中使用Spring, 使用 Spring 的器监听器 ContextLoaderListener.docx

    二、 使用 Spring 的器监听器 ContextLoaderListener o1. maven依赖pom.xml o2. 注册监听器 ContextLoaderListener o3. 指定 Spring 配置文件的位置 o4. 获取Spring容器对象 在 Web 项目中使用 Spring 框架,首先...

    spring 常用jar包

    6. **spring-web.jar**:Web模块提供了将Spring应用与Web环境集成的能力,包括Servlet监听器、过滤器和控制器。它是构建Spring MVC的基础。 7. **spring-webmvc.jar**:Spring MVC模块,提供了模型-视图-控制器架构...

    spring学习需要的常用jar包

    6. **spring-web.jar**:提供了与Web相关的功能,如Servlet监听器、过滤器,以及HTTP客户端支持。 7. **spring-webmvc.jar**:Spring MVC是Spring Web模块的一部分,是一个模型-视图-控制器框架,用于构建Web应用...

    spring常用包

    8. **spring-web**和**spring-webmvc**:前者是Spring Web应用的基础,处理HTTP请求和响应,提供Servlet监听器和过滤器。后者是Spring MVC,是构建Web应用的模型-视图-控制器框架,支持RESTful风格的URL映射、视图...

    21. Spring Boot过滤器、监听器【从零开始学Spring Boot】

    在Spring Boot框架中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们可以帮助我们实现一些自定义的处理逻辑,如数据校验、日志记录、请求拦截等。下面将详细讲解这两个概念及其在实际开发中的...

    使用Spring事件机制实现异步的方法

    使用@EventListener注解也可以轻松地实现事件监听器,Spring框架将自动扫描带有该注解的类,并将其添加到ApplicationContext中。在上面的代码中,使用@EventListener注解的MyEventHandler类将被Spring框架自动添加到...

    Spring的ApplicationEvent事件和监听器的测试Demo

    在Spring框架中,ApplicationEvent和监听器是实现应用内异步通信的重要机制。这个测试Demo主要展示了如何在Spring环境中创建自定义事件、发布事件以及注册和处理这些事件。以下是对这个测试工程的详细解析: 首先,...

    spring 监听器浅析.docx

    spring 监听器 源码阅读 事件驱动 publishEvent 欢迎下载

    Spring监听器及定时任务实现方法详解

    Spring监听器及定时任务实现方法详解 在本文中,我们将详细介绍Spring监听器及定时任务实现方法的详解。通过示例代码,我们将展示如何使用Spring监听器和定时任务来实现批处理任务的执行。 Spring监听器 在Spring...

    event.rar-Spring事件监听机制

    监听器的生命周期与Spring容器的生命周期紧密相关。当监听器作为Spring bean注册时,它们会在容器启动时自动激活,而在容器关闭时被销毁。 总结,Spring事件监听机制是Spring框架中的一个重要特性,它提供了组件间...

    ActiveMQ与spring集成实例之使用消息监听器

    集成ActiveMQ和Spring的核心在于使用Spring的`JmsTemplate`以及消息监听器。本文将深入探讨如何在Spring环境中配置并使用ActiveMQ,以及如何通过消息监听器来接收和处理消息。 ### 1. 安装与配置ActiveMQ 首先,你...

Global site tag (gtag.js) - Google Analytics