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

我结束了这个问题,有两种可能的解决方案:

  1. 从注入ResourceLoader得到一个ClassLoader实例。我决定不采取这种方法,因为它返回了Spring Boot的ClassLoader实例,而不是Web容器的实例。

  2. ServletContext实例注入到bean创建方法中,并将其传递给ServletContextListener构造函数。这适用于Tomcat,它通过包装ServletContext和覆盖方法来引发异常来实现限制。通过注入,我能够使用未实现限制的未包装版本。这可能不适用于其他容器。