从我的项目源代码中存在的实现接口的 JAR 加载 class

Load a class from a JAR implementing interface existing in my project's source code

我的 Web 应用程序的一个模块有一个 GeneralOperation 接口,我希望其他用户实现该接口以提供他们自己的功能。

我创建了一个包含这个接口的模块的JAR,并提供给用户。然后,用户可以导入这个库并创建一个 class MyCustomOperation 实现这个接口。最后,他们生成一个包含其实现的 JAR,并将他们的 JAR 放入 tomcat/lib 文件夹中,以便 JVM 可以在运行时看到它。

回到我的应用程序,当我尝试加载他们的 MyCustomOperation class 时,它无法转换为源代码中存在的 GeneralOperation 接口,因为它认为MyCustomOperation 实现的 GeneralOperation 是一个差异接口,而不是现有接口。

如何解决这个问题?

A​​ class 由其名称及其 class 加载程序标识。您的实现 MyCustomOperation 由 tomcat 通用 class 加载器加载,接口 GeneralOperation 由 tomcat Webapp class 加载器加载。因此,您不能在这两种类型之间进行转换。

为了解决您的问题,

1.you 可以使用序列化

2.or 带你进入 tomcat common classloder(tomcal/lib) 和 实现到 webapp(这样你就可以加载 class 没有反映)。