何时在webapplications

时间:2016-10-04 10:14:20

标签: java java-ee

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

1 个答案:

答案 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);
}