zoukankan      html  css  js  c++  java
  • Spring之IntrospectorCleanupListener、ContextLoaderListener

    一般在使用SpingMVC开发的项目中,一般都会在web.xml文件中配置IntrospectorCleanupListener(可选),ContextLoaderListener监听器,如下:

    <listener>
          <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
    <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    1、ContextLoaderListener
      对于一个web容器,web容器提供了一个全局的上下文环境,这个上下文就是ServletContext,其为后面Spring IOC容器提供宿主环境。在web容器启动时会触发容器初始化事件,contextLoaderListener监听到这个事件后其contextInitialized方法就会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文就是根上下文,也就是WebApplicationContext,实际实现类是XmlWebApplicationContext,这个其实就是spring的IoC容器,这个IoC容器初始化完后,Spring会将它存储到ServletContext,可供后面获取到该IOC容器中的bean。

    详细参考:https://www.cnblogs.com/weknow619/p/6341395.html

    2、IntrospectorCleanupListener

      在分析IntrospectorCleanupListener之前,先了解一下Introspector。Introspector是JDK中java.beans包下的类,它为目标JavaBean提供了一种了解原类方法、属性和事件的标准方法。通俗的说,就是可以通过Introspector构建一个BeanInfo对象,而这个BeanInfo对象中包含了目标类中的属性、方法和事件的描述信息,然后可以使用这个BeanInfo对象对目标对象进行相关操作。
      IntrospectorCleanupListener实现了ServletContextListener接口,也就是说,在web容器初始化(准确的说是在filters或servlets初始化之前)的时候会执行contextInitialized方法,在ServletContext销毁(准确的说是在filters和servlets销毁之后)的时候会执行contextDestroyed方法。从图中contextDestroyed方法,可以看到在销毁ServletContext的时候调用了Introspector.flushCaches方法,清空了对应缓存。
      在使用Spring本身的时候并不需要使用此监听器,因为Spring自己的内部机制会立即清空对应的缓存。虽然,Spring本身不存在这样的问题,但是如果和其它框架结合使用,而其它框架有这个问题,如Struts、Quartz等,那就需要配置这个监听器,在销毁ServletContext的时候清空对应缓存。
     
  • 相关阅读:
    The IBM Blockchain Platform: Develop pre-requisites
    分布式账本简介
    MAC快捷键
    js跳转方法整理与自动刷新
    解决Excel打开UTF-8编码CSV文件乱码的问题
    C#代码实现邮箱验证C#中及一些常用的正则表达式
    php大小写转换函数
    PHP empty()函数使用需要注意
    关于网站调用在线翻译api实现翻译功能
    关于淘宝店铺装修弹出层popup的记录
  • 原文地址:https://www.cnblogs.com/super-yu/p/10616003.html
Copyright © 2011-2022 走看看