我有一个 JAR 应用程序 M.jar,它支持动态编写和加载扩展。应用程序要求类实现接口 E 并被称为 NE。
现在,以下是我正在尝试做的事情,
- 编写扩展 API1 并将其加载到 M。
- 编写另一个扩展 APIUser,将其加载到 M 并使用 API1。
请参阅下图了解我在这里尝试做的事情。
我知道 M.jar 使用自定义 ClassLoader,因为它只需要将任何扩展名命名为 AE。
我尝试了此处描述的 ServiceProvider、ServiceProviderInterface 方法,但没有奏效。我相信这是因为 API 的类不在 M 的类路径中,因此 APIUser 找不到它。
我想知道,
- 如果可以使用 APIUser 的 ClassLoader 加载 API 的类并初始化它以供 APIUser 使用。
- M 是否可以从任何其他扩展中阻止/隔离 API 的 ClassLoader?我认为它可以基于这个答案。
- 还有什么其他方法可以在 APIUser1 或 APIUSer2 中加载 API 类......并且只维护 API 类的一个实例?(即单例)