您可以告诉我何时使用Thread.currentThread().getContextClassLoader()
在网络应用程序中。请给我一些现实生活中的例子。请不要将其标记为重复的问题(我的问题是何时使用Thread.currentThread()。getContextClassLoader(),而不是用于加载属性文件)。我经历了很多网站,但没有得到正确答案。
答案 0 :(得分:2)
首先,请注意,此方法不是Java EE
相关的,它是Java SE
的方法,因此它不是仅用于Web应用程序但可能用于任何Java应用程序。
我们通常将此方法与Thread.currentThread().setContextClassLoader(ClassLoader)
一起使用,以检查和/或更改调用线程的上下文ClassLoader
。
所以通常让我们说你正在编写一个Java应用程序,它需要一个自定义ClassLoader
来加载来自特定文件夹和/或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);
}