gpt4 book ai didi

java - 一个类的所有依赖是否都由同一个类加载器加载?

转载 作者:搜寻专家 更新时间:2023-10-31 19:29:10 29 4
gpt4 key购买 nike

  • 在我的 /tomcat/lib 目录中,我有类 SharedClass(因此与所有网络应用程序共享)。
  • 在我的网络应用程序的 WEB-INF/lib 中,我有类 LocalClass
  • SharedClass 引用了 LocalClass

在我的网络应用程序中,我尝试创建 SharedClass 的实例,但失败并显示消息:

NoClassDefFoundError: LocalClass.

由于 SharedClass 是共享的,而 LocalClass 是我的网络应用程序的本地文件,所以我希望它能正常工作,但事实并非如此。

我怀疑 SharedClass 是由 Tomcat 父类加载器加载的,而 LocalClass 是由 Web App 类加载器加载的。由于 SharedClass 是由父级加载的,我假设它的所有依赖项也必须由父级加载。因此,父级找不到 LocalClass 并抛出错误。

这有意义吗?有什么办法解决这个问题(无需编写我自己的类加载器)?

最佳答案

类加载器是分层的。类加载器有一个父类,并且可以看到其父类的类。反之则不然。因此,由 webapp 的类加载器加载的类可以访问由公共(public) Tomcat 类加载器(其父级)加载的类,后者可以访问 JRE 类(Tomcat 类加载器的父级)。

参见 the Tomcat documentationClassLoader javadoc了解更多详情。

关于java - 一个类的所有依赖是否都由同一个类加载器加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287417/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com