首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java类加载器委托

Java类加载器委托
EN

Stack Overflow用户
提问于 2012-11-13 10:03:20
回答 1查看 358关注 0票数 2

我有一个关于java ClassLoaders的问题。我正在尝试使用不同的ClassLoaders,以便能够在同一个程序中运行不同版本的JAR。

我在某处听说过,如果您使用一个ClassLoader加载一个类,那么从该类中调用(被加载)的所有类都将使用相同的ClassLoader。这是正确的吗?

如果没有,有没有一种巧妙的方法来设置ClassLoader的上下文(比如说,从特定类/库调用的所有内容都应该使用相同的ClassLoader)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-13 10:44:32

这不是一个简单的主题,我建议在网上做更多的研究,因为这里没有足够深入的答案。但是,作为一个简短的概要:

由于类加载器委派,通过普通类引用加载的

  • 类(即A类中使用静态类型B的变量的一行代码)将使用与初始class.
  • however,相同的类加载器加载,因此类可能实际上不是由最初开始搜索的classloader加载的。例如,我让类加载器LA和父类加载器LP一起加载A类。类B由A引用,因此对类B的搜索将从LA开始。但是,B的类字节实际上是在LP中找到的,所以LP加载该类并将其传递给LA,后者返回它。然而,归根结底,B属于LP,而不是LA。
  • 具有通过反射加载类的实用程序(例如,序列化、JAXB、Hibernate等)。或者通常与嵌套类加载器一起使用的框架(例如Java EE appservers),所有的赌注都是无效的。通常,像这样的实用程序/框架使用context classloader加载类,但情况并不总是这样。关于所使用的类加载器,每个实用程序可能具有不同的优先级和回退。此外,许多都有在运行时显式提供类加载器的方法。

根据经验,在执行您知道来自嵌套类加载器的代码时(可能是因为您设置了它),您应该适当地设置当前上下文类加载器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13354640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档