繁体   English   中英

如何使用两个不同的类加载器加载同一类

[英]How to load same class with two different classloaders

我在加载由两个不同的类加载器实例化的对象时遇到问题。 基本上,我用三个不同的插件实现了一个Webapp,每个插件都有自己的类加载器。 项目结构如下所示:

MyAppService
 - ObjectInterface.java
MyAppImpl
 - ObjectImplementation.java
MyClass
 - MyClass.java

它是一个基于Maven的项目。 MyAppImplMyClass都将MyAppService作为依赖项。 现在,我使用此代码在ObjectImplementation中创建一个ObjectImplementation类的ObjectImplementation

ObjectInterface o = new ObjectImplementation();

我想将此对象传递给类Myclass的方法,并在其中使用此代码获取对象。

ObjectInterface o = (ObjectInterface) passedObject;

但是我遇到异常java.lang.ClassCastException: MyAppImpl.ObjectImplementation cannot be cast to MyAppService.ObjectInterface 我也尝试使用代码进行动态类加载

ObjectInterface o = (ObjectInterface) Class.forName("MyAppImpl.ObjectImplementation").newInstance();

但我得到异常java.lang.ClassNotFoundException: MyAppImpl.ObjectImplementation 当前,无法将MyAppImpl添加为MyClass的依赖项。 有人知道我的问题是否有解决方案吗?

请阅读有关ClassLoader及其层次结构的信息。 另请参阅有关委派机制。

在您的情况下,类由叶类加载器加载,并且同一类有不同的副本。 如果特定类未由当前类加载器或其父级加载,则您将获得java.lang.ClassCastException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM