首页 > 其他分享 >spring 监听器 IntrospectorCleanupListener简介

spring 监听器 IntrospectorCleanupListener简介

时间:2023-07-02 13:07:08浏览次数:47  
标签:web 监听器 spring 应用 缓冲 IntrospectorCleanupListener Introspector


 

spring中的提供了一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器。它主要负责处理由 
JavaBeans  Introspector的使用而引起的缓冲泄露。spring中对它的描述如下:
 
它是一个在web应用关闭的时候,清除JavaBeans Introspector的监听器.在web.xml中注册这个listener.可以保证在web 应用关闭的时候释放与掉这个web 应用相关的class loader 和由它管理的类 
如果你使用了JavaBeans Introspector来分析应用中的类,Introspector 缓冲中会保留这些类的引用.结果在你的应用关闭的时候,这些类以及web 应用相关的class loader没有被垃圾回收.
 
不幸的是,清除Introspector的唯一方式是刷新整个缓冲.这是因为我们没法判断哪些是属于你的应用的引用.所以删除被缓冲的introspection会导致把这台电脑上的所有应用的introspection都删掉.
 
需要注意的是,spring 托管的bean不需要使用这个监听器.因为spring它自己的introspection所使用的缓冲在分析完一个类之后会被马上从javaBeans Introspector缓冲中清除掉.
 
应用程序中的类从来不直接使用JavaBeans Introspector.所以他们一般不会导致内部查看资源泄露.但是一些类库和框架往往会产生这个问题.例如:Struts 和Quartz.
 
单个的内部查看泄漏会导致整个的web应用的类加载器不能进行垃圾回收.在web应用关闭之后,你会看到此应用的所有静态类资源(例如单例).这个错误当然不是由这个类自身引起的.

这个listener的源代码 :



package 
  org.springframework.web.util;

 
 import 
  java.beans.Introspector;
 
 import 
  javax.servlet.ServletContextEvent;
 
 import 
  javax.servlet.ServletContextListener;

 
 public 
   
  class 
  IntrospectorCleanupListener  
  implements 
  ServletContextListener  
  
 
 {
     public    void  contextInitialized(ServletContextEvent event)   
{
    }

     public    void  contextDestroyed(ServletContextEvent event)   
{
        Introspector.flushCaches();
    }
}

标签:web,监听器,spring,应用,缓冲,IntrospectorCleanupListener,Introspector
From: https://blog.51cto.com/u_16174476/6604425

相关文章

  • Spring factory load
    if(!classpathPrefix.endsWith("/"))classpathPrefix=classpathPrefix+"/";GenericApplicationContextappContext=null;if(useCache)appContext=getCachedContext(classpathPrefix,batchName);if(appContext!=null){......
  • 在spring 的jdbc sql中使用in 语句
    1.<propertyname="sqlSelectPricesForHoldAssetByDate"><value>selectA.ASSETPRICEID,A.ASSETID,A.SOURCE,A.ASOFDATE,A.CURRENCY,A.BID,A.ASKfromassetpriceAINNERJOINloanfacilitylfONA.assetid=lf.assetidwh......
  • 使用Spring的NamedParameterJdbcTemplate完成DAO操作
    NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。publicObjectqueryForObject(Stringsql,MapparamMap,RowMapperrowMapper)......
  • (六)Spring源码解析:Spring AOP源码解析
    〇、AOP概念Aspect:切面给业务方法增加到功能,切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。Pointcut:切入点切入点指声明的一个或多个连接点的集合,通过切入点指定一组方法。被标记为final......
  • 部署springboot项目到linux服务器
    1.使用Xshell连接服务器xshell免费版地址:家庭/学校免费-NetSarangWebsite(xshell.com)2.安装java运行环境sudoaptinstallopenjdk-8-jdk3.使用xftp上传后端jar包文件xftp免费版地址:家庭/学校免费-NetSarangWebsite(xshell.com)4.在xshell中使用命令......
  • SpringCloud学习(四)
    参考:https://blog.csdn.net/qq_25928447/article/details/124340264?spm=1001.2014.3001.5501消息队列之前如果需要进行远程调用,一般可以通过发送HTTP请求来完成,现在,可以使用第二种方式,就是消息队列,它能够将发送方发送的信息放入队列中,当新的消息入队时,会通知接收方进行处理......
  • 菜鸟学习Spring——SpringMVC注解版前台向后台传值的两种方式
    一、概述。在很多企业的开法中常常用到SpringMVC+Spring+Hibernate(mybatis)这样的架构,SpringMVC相当于Struts是页面到Contorller直接的交互的框架也是界面把信息传输到Contorller层的一种架构,通过这个架构可以让我们把页面和Contorller层解耦,使得开发人员的分工更加明确。二、代码演......
  • Spring 配置事务管理器方法的理解
    @BeanpublicPlatformTransactionManagertransactionManager(DataSourcedataSource){DataSourceTransactionManagertransactionManager=newDataSourceTransactionManager();transactionManager.setDataSource(dataSource);return......
  • SpringMVC的执行流程
    SpringMVC的执行流程要求掌握SpringMVC的执行流程了解SpringMVC的重要组件的作用概要我把整个流程分成三个阶段准备阶段匹配阶段执行阶段准备阶段在Web容器第一次用到DispatcherServlet的时候,会创建其对象并执行init方法init方法内会创建SpringWeb......
  • 【springboot】支持热部署
    加入依赖坐标<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency> 配置Compiler选项 按2下shift键,选择registry 修改配置后保存(ctrl+S)即可以热部署了或者直接点击更快......