ServletClassLoader无法在Spring Boot中调用getClassLoader
问题描述:
我有一个ServletContextListener
,我正在初始化Spring Boot。通常,听众会从ServletContext
获得ClassLoader
实例。但是,由于它是通过Spring Boot添加到容器中的,因此ServletContextListener
无法调用getClassLoader()
方法。 (它必须通过web.xml,web-fragment.xml或@WebListener
注释初始化。)ServletClassLoader无法在Spring Boot中调用getClassLoader
那么,什么是最好的方式来获得适当的ClassLoader
实例ServletContextListener
?
答
我结束了这个问题,有两种可能的解决方案:
从注入
ResourceLoader
得到一个ClassLoader
实例。我决定不采取这种方法,因为它返回了Spring Boot的ClassLoader
实例,而不是Web容器的实例。将
ServletContext
实例注入到bean创建方法中,并将其传递给ServletContextListener
构造函数。这适用于Tomcat,它通过包装ServletContext
和覆盖方法来引发异常来实现限制。通过注入,我能够使用未实现限制的未包装版本。这可能不适用于其他容器。