OSGI服务与Singleton?

Adr*_*ang 14 osgi

我是OSGI的初学者,我想知道是否有人可以告诉我创建OSGI服务与单例模式之间的区别.例如,假设我有一个core提供的bundle IService,以及需要访问它的多个bundle.我可以:

  1. core-bundle中注册服务,插件可以访问该服务
  2. 提供一个提供服务的单例类

使用OSGI服务似乎相当麻烦; 而且由于插件必须依赖于Core(要获得接口),使用OSGI服务有什么好处?

Pet*_*ens 16

服务是独立模块之间的连接.使模块依赖于服务(使用其规范包)可以显着减少模块之间的耦合,从而提供模块化的许多好处.

我认为单例模式以两种不同的方式使用:您只希望在一组用户(例如日志服务)之间共享单个对象,或者您实际上只能有一个实例(例如,只有一个硬件).总的来说,我看到企业软件世界中的大多数人都在谈论前者.然而,经验表明,当项目增长时,单身人士变得更少单身,但更多的是共享对象,或者至少看起来是共享对象.OSGi中的好处是你可以对两者进行建模,而"单身人士"的客户端也不知道它,也不需要一些中央配置.原因是OSGi依赖于负责模块,注册服务是一种本地决策,就像收听服务一样.

服务的力量不在其动态中(虽然它们很酷,特别是在开发期间),服务的本质是它们在模块内部提供完全本地控制而无需中央配置.一旦你理解了这是多么强大,就没有办法回来了:-)

最后,OSGi服务并不繁琐,因为我们的DS带有注释.现在注册服务比创建Spring bean,没有xml,没有集中配置简单得多:


// A component registered as a ISingleton service
@Component
public class MyImpl implements ISingleton {
  void doSingle() { ... }
}
Run Code Online (Sandbox Code Playgroud)
// A component that uses the ISingleton component
@Component
public class MyConsumer {

  @Reference
  void setISingleton(ISingleton is) { ... }
}
Run Code Online (Sandbox Code Playgroud)

......动态很大程度上是免费的......


use*_*210 8

简短回答:如果您不 - 而且不会 - 需要OSGi服务的好处(例如,动态管理的服务实现和服务搜索),那么您不需要OSGi服务.

但是这里要考虑的是服务是否繁琐.哎呀,OSGi本身可以算是很麻烦.另一个包需要提供该类的实现吗?也许不吧.Core捆绑包是否会关闭或无法按需提供实施?也许.

要确定某个服务是否适合所讨论的类,请在OSGi Alliance的What Is OSGi页面上阅读服务的特定优势 .他们非常好地解释了你的单身人士课程如何变得比服务更麻烦.

祝好运.