从其他OSGi包中实例化类

时间:2014-09-08 23:04:24

标签: osgi classloader

我有两种类型的捆绑包:

  1. 启动器:负责在“弹药”包中启动代码的捆绑包。
  2. Ammo:实现预定义接口的捆绑包。
  3. 一个容器只有一个Launcher,但可能有几个Ammo包。 Ammo捆绑包依赖于Launcher捆绑包。我只是希望Launcher在Ammo包中实例化一个类。但是Launcher的类加载器找不到它。获得适当的类加载器的最佳方法是什么?

    注意:我需要能够添加和删除不同类型的Ammo,因此Launcher无法将Ammo指定为依赖项。

1 个答案:

答案 0 :(得分:1)

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

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

而不是对黑客进行分类加载,而是根据OSGi服务设计解决方案。