2

在我的应用程序中,单独使用服务是毫无用处的。您总是需要一些外部配置信息才能使服务可用。

与 ConfigurationAdmin 结合使用的组件很有意义,因为从那时起,对于我创建的每个配置,都会创建一个组件实例。这非常适合我的用例。

现在,问题出现了,如果我想以编程方式使用来自其他包的组件怎么办?这有意义吗?

我知道我可以再次将组件导出为服务,并从其他 bean 中使用它,但是假设我有一个 servlet,用户可以在其中创建配置,并且对于每个配置的实例都有一个操作列表;当他单击动作时,我需要找到适当的组件,并对其执行动作。

在 OSGi 之上实现此功能的最佳方式是什么?

4

2 回答 2

5

“以编程方式使用来自另一个包的组件”对我来说听起来就像OSGi 服务。

于 2012-03-05T13:22:21.227 回答
0

此方法检索 osgi 服务(iso 让 osgi 容器连接依赖项):

public class ServiceLocator {

  public static <T extends Object> T getService(final Class<T> clazz) {
    final BundleContext bundleContext = FrameworkUtil.getBundle(clazz).getBundleContext();
    // OSGI uses the order of registration if multiple services are found
    final ServiceReference<T> ref =     bundleContext.getServiceReference(clazz);
    return bundleContext.getService(ref);
  }

}

我在现有项目中引入 DS 时使用了这个,它并不到处使用 DS。并非项目中的所有组件都被实例化为 osgi DS 组件。在任何地方我需要访问通过任何其他方式实例化的类中的 DS 组件,我使用了这个方法......

于 2017-10-12T15:10:10.047 回答