Introspector(内省)模块是一个JavaBean的工具类,用于获取JavaBean里的描述符号。它包括BeanInfo、PropertyDescriptor、MethodDescriptor、BeanDescriptor、EventSetDescriptor和ParameterDescriptor等相关类。Introspector模块的主要作用是在使用反射之前快速获取JavaBean的Setter和Getter方法。

在Spring体系中,为了避免JDK对内省信息的缓存无法被垃圾回收机制回收导致内存溢出,主要的操作是通过配置IntrospectorCleanupListener预防,或者通过CachedIntrospectionResults类自行管理Introspector中的缓存。这样可以避免刷新整个Introspector的缓存缓冲区而导致其他应用的Introspector也被清空。

在SpringBoot刷新上下文的方法AbstractApplicationContext#refresh()中finally代码块中存在清理缓存的方法AbstractApplicationContext#resetCommonCaches(),里面调用到的CachedIntrospectionResults#clearClassLoader(getClassLoader())方法就是清理指定的ClassLoader下的所有Introspector中的缓存的引用。

总之,Introspector(内省)模块是Spring Framework中的一个重要模块,它可以帮助开发者快速获取JavaBean的Setter和Getter方法,并且通过缓存管理机制避免内存泄漏问题

《Spring Framework RCE CVE-2022-22965漏洞复现报告》 Introspector是一个专门处理JavaBean的工具类用来获取JavaBean里描述符号常用的JavaBean的描述符号相关类有BeanInfo、PropertyDescriptorMethodDescriptor、BeanDescriptor、EventSetDescriptor和ParameterD

原文地址: https://www.cveoy.top/t/topic/gjZG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录