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