【问题标题】:Instantion of classes from other OSGi bundles来自其他 OSGi 包的类的实例化
【发布时间】:2014-11-02 06:28:10
【问题描述】:

我有两种类型的捆绑包:

  1. Launcher:负责在“ammo”包中启动代码的包。
  2. Ammo:实现预定义接口的包。

一个容器只有一个启动器,但可能有多个弹药包。 Ammo 捆绑包取决于 Launcher 捆绑包。我只希望启动器在弹药包中实例化一个类。但是启动器的类加载器找不到它。获取合适的类加载器的最佳方法是什么?

注意:我需要能够添加和删除不同类型的弹药,因此启动器无法真正将弹药指定为依赖项。

【问题讨论】:

  • 如果启动器负责启动弹药包中的代码,那么启动器依赖于弹药,而不是相反。您需要遵循 @Balazs 的建议并制定基于 OSGi 的解决方案。

标签: osgi classloader


【解决方案1】:

创建一个 AmmoFactory 接口并从每个 Ammo 包中注册工厂 OSGi 服务。

在 Launcher 端,您可以在工厂实例的帮助下跟踪注册的服务并实例化对象。

不要使用类加载技巧,而是基于 OSGi 服务设计您的解决方案。

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 2015-06-09
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多