5

在下面的行中:

这是获取类加载器的两种方法

1) Thread.currentThread().getContextClassLoader();

2) getClass().getClassLoader();

有人请解释一下这两者之间的区别。

我的第二个问题是我们什么时候使用 Thread.currentThread().getContextClassLoader()

我已经在 StackOverflow 上引用了一些关于相同的帖子,但没有找到基本答案。

我已经看到了你建议的问题的答案。

线程的上下文类加载器和普通类加载器的区别

线程上下文类加载器为类加载委托方案提供了一个后门。以 JNDI 为例:它的核心由 rt.jar 中的引导类实现(从 J2SE 1.3 开始),但这些核心 JNDI 类可能会加载由独立供应商实现的 JNDI 提供程序,并可能部署在应用程序的 -classpath 中。这种情况需要一个父类加载器(在这种情况下是原始类加载器)加载一个对其子类加载器之一可见的类(例如,系统类加载器)。正常的 J2SE 委派不起作用,解决方法是让核心 JNDI 类使用线程上下文加载器,从而有效地通过类加载器层次结构在与正确委派相反的方向“隧道”。

正如建议的解决方法是让核心 JNDI 类使用线程上下文加载器,我不明白这在这种情况下有什么帮助。

我们想使用父类加载器加载实现供应商类,但它们对父类加载器不可见。那么我们如何使用父类加载它们,即使我们在线程的上下文类加载器中设置了这个父类加载器。

请建议

4

0 回答 0