从我的项目源代码中存在的实现接口的 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
没有反映)。
我的 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 没有反映)。