Osgi丛及其与包的关系



对于使用OSGi规范编写的应用程序

服务是一个java对象,表示一个功能,例如记录语音呼叫每个服务都有许多与之相关的包,例如服务接口、服务实现和slick。

我无法理解以上与OSGi捆绑包之间的关系,因为捆绑包包含服务,这是否意味着它们包含服务包或其他

OSGi服务bundle通过各方都知道的定义良好的Java接口进行通信的一种机制。OSGi充当broker,其中一方可以在接口名称下注册服务,其他方可以在该接口名称下获得服务。也就是说,实际的实现类与服务的用户是解耦的。这允许在服务的用户不知情的情况下使用不同的实现类。例如,如果你想设置语音通话,可以有一个PhoneExchange服务为你提供设置通话和录制通话的功能。然后你可以根据PhoneExchange界面编写代码。在运行时,您可能连接到爱立信PBX或诺基亚PBX。

Java工厂也存在这种解耦。然而,Java工厂有很多缺点,而且往往非常静态。OSGi代理是一个动态代理。服务可以注册,也可以取消注册。OSGi中的动态性被许多人视为难以处理,但声明式服务使其或多或少变得微不足道。当您真正了解OSGi服务的动态性时,您会发现许多复杂的动态场景,例如通信通道,映射得非常好。

捆绑包是OSGi中的模块。它包含所有Java代码和资源。捆绑包将导出导入Java。在一个设计良好的系统中,这些只是的Java包,它们包含服务接口。导出实现包是一种糟糕的模式。在启动时,束被连接。这意味着出口商与进口商有联系。OSGi的独特之处在于它可以在多个版本中处理同一个包。

捆绑包有自己的生命周期。他们开始和停止。在这两种情况下,它们都可以运行自己的私有代码。

上述声明性服务提供了另一层。当Java类声明它是带有注释的组件时,它还可以声明它所依赖的服务。当这些服务被注册时,它们被注入,并且组件被激活。声明式服务让你可以吃蛋糕,也可以随心所欲。你可以在没有相关复杂性的情况下获得令人难以置信的强大动力。

最新更新