【发布时间】:2012-11-12 19:28:41
【问题描述】:
我将解决方案分为 2 个项目:
-
独立项目包含接口
ExampleInf,并声明了应用程序所需的一些服务。这些服务由第三方 API(Hadoop 客户端 API)提供。该项目包含 GUI 组件和其他应用程序逻辑,但不链接提供ExampleInf声明的服务的第三方库。此项目中没有实现ExampleInf的类。 -
dependent 项目包含指向第三方库的链接。本项目包含类
ExampleImpl,封装了第三方API,实现了ExampleInf。
在独立项目中有一个类(我们称之为类A)消费(使用)ExampleInf声明的服务。因为 independent 不链接 dependent 项目,为了使用ExampleInf,它需要在运行时动态加载其实现ExampleImpl。还需要动态加载ExampleImpl所需的所有第三方库。
目前这是由一组常量(public static final String 属性)完成的,其中包含动态加载资源所在的依赖项目的路径以及大量凌乱的ClassLoader 代码。我不认为这是一个好的解决方案。是否有任何模式、最佳实践或通用方法可以做到这一点?根据您的经验,您会推荐什么?
这种模式让我想起了 Java EE 中的一些依赖注入。至少我认为最好将需要动态加载到 XML 的类和库 (.jar-s) 的位置外部化,然后循环加载它们,而不是为每个常量单独调用 ClassLoader.loadClass。有没有什么干净的方法可以在同一个包中加载 XML 并加载该 XML 指定的类和 jar?代码示例将不胜感激。
【问题讨论】:
标签: java xml dynamic classloader dynamic-loading