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