Java 何时在webapplications中使用Thread.currentThread().getContextClassLoader()

Java 何时在webapplications中使用Thread.currentThread().getContextClassLoader(),java,jakarta-ee,Java,Jakarta Ee,嗨,有人能告诉我什么时候使用Thread.currentThread().getContextClassLoader() 在web应用程序中。请给我一些现实生活中的例子。请不要将其标记为重复问题(我的问题是何时使用Thread.currentThread().getContextClassLoader(),而不是加载属性文件)。我浏览了很多网站,但没有得到正确的答案。首先,请注意,此方法与JavaEE无关,它是JavaSE的一种方法,因此它不是仅用于web应用程序的方法,而是可能用于任何Java

嗨,有人能告诉我什么时候使用
Thread.currentThread().getContextClassLoader()

在web应用程序中。请给我一些现实生活中的例子。请不要将其标记为重复问题(我的问题是何时使用Thread.currentThread().getContextClassLoader(),而不是加载属性文件)。我浏览了很多网站,但没有得到正确的答案。

首先,请注意,此方法与
JavaEE
无关,它是
JavaSE
的一种方法,因此它不是仅用于web应用程序的方法,而是可能用于任何Java应用程序的方法

我们通常将此方法用于
Thread.currentThread().setContextClassLoader(ClassLoader)
,以检查和/或更改调用线程的上下文
ClassLoader

因此,通常假设您正在编写一个Java应用程序,该应用程序需要一个自定义的
类加载器
,该加载器从特定文件夹和/或jar文件加载类,而这些文件夹和/或jar文件最初不在类路径上,您可以使用这些方法更改上下文
ClassLoader
并恢复以前的CL。这将允许您的代码访问以前无法从当前上下文CL访问的类,因为它们最初不在类路径上

下面是您的代码的外观:

// The previous context ClassLoader
final ClassLoader contextCL = Thread.currentThread().getContextClassLoader();
try {
    // Set my custom ClassLoader to make my classes accessible
    Thread.currentThread().setContextClassLoader(myCustomCL);
    // Execute some code here that will be able to access to classes or resources from
    // my specific folders and/or jar files

} finally {
    // Restore the previous CL
    Thread.currentThread().setContextClassLoader(contextCL);
}