【发布时间】:2018-07-22 09:06:53
【问题描述】:
我目前正在编写一个需要在不同类型的设备上运行的应用程序。我的方法是制作一个“模块化”应用程序,可以根据需要操作的设备动态加载不同的类。
为了使应用程序易于扩展,我的目标是为其他模块(.jar 或 .class 文件)分配特定路径,使核心程序保持原样。当不同的客户需要不同的模块时,这一点至关重要(无需为每个客户编译不同的应用程序)。
这些模块将实现一个通用接口,而“核心”应用程序可以使用接口上定义的这些方法,并让单个实现完成工作。 按需加载它们的最佳方式是什么?我正在考虑使用 URLClassLoader,但我不知道这种方法是否符合新模式和 Java 趋势的最新情况,就像我想的那样喜欢避免设计不良的应用程序和不推荐使用的技术。 使用 JDK 9 制作模块化且易于扩展的应用程序的最佳替代方法是什么(只需将模块文件添加到文件夹即可扩展)?
【问题讨论】:
-
没有最好的方法。所有方法都有其优点和缺点。
URLClassLoader是最古老也是最知名的方法。 Java 9 中还有一个新方法Lookup.defineClass,但它只能在同一个包中加载一个类。您可能还应该看看 OSGi,但它可能非常麻烦。 -
您可以使用依赖注入框架来为您管理布线。或者您可以使用您的构建系统来创建和管理特定于设备的解决方案(例如 Maven 程序集)。
-
确保探索服务和 ServiceLoader。可能您可以为每种设备类型创建服务提供者,每个都实现核心应用程序使用的服务接口。
标签: java java-9 java-module