为什么要建立和OSGi中使用的服务(Why should one create & use serv

2019-10-30 04:50发布

我一直在研究OSGi过去的一周,但唯一的理由似乎并不符合正确的,为什么我需要注册和使用任何bundle的时候我可以通过简单地导入了它做到这一点JAR文件。 我这样做实现有什么好处? 是啊,肯定的是,我得到的依赖管理 ,但:

我可以使用任何其他JAR通过导入未注册的文件services本身? 如果是的话,我为什么要对使用OSGi的开销?

Answer 1:

OSGi的的整体思路是,你得到的模块:关注明确分工和功能,以取代或在需要时为不同的版本或实施更新功能的选项。

通过导入一个罐子可以实例在其他jar声明的类,但你不能用另一种实现方式或版本来替换它(运行时!)。 与OSGi服务的想法是,你定义的Java接口,并通过查找在OSGi服务注册表实现无客户端实际意识到的接口实现的使用从客户端此接口。 这使得有可能替换为其他版本,甚至完全不同的解决方案,在运行时与客户很少关注的实施。 这只是从另一个罐子一个类实例化是不可能的。

当然,如果你不需要,你可能会认为OSGi是只是一个很大的开销。 你可能是正确的,根据您的情况。 我发现下面的OSGi的结构为您提供了更好的组件和应用程序的整体架构之间的关系的认识。 一个很大的好处,从维护的角度。



Answer 2:

服务解决的问题是,当你开始使用基于契约编程浮现的结合问题 。 在你的代码使用的接口,但在运行时的实际需要为接口的实现对象。 如何获得呢?

服务是一个令人难以置信的优雅的解决方案要做到这一点结合问题,所有其他解决方案,我知道有漏水的抽象和分析的时候,是不是模块化的。 有些人指向基于XML的解决方案,但他们似乎只是使这种耦合消失,表面下的耦合及其不良的副作用仍然存在。

解耦服务的主要优势,将是值得的孤单。

但是,一旦你开始使用服务,看看它是多么容易与他们一起工作(在声明式服务),他们成为一个主要的建筑和设计简陋。 你开始撰写系统进行服务,而不是代码,他们成为使您的系统灵活性和可维护性的铰链。 让我看看你的系统的服务图,我告诉你,不只是你的系统做什么(不像大多数高层建筑的图片,是完全不同的系统之间惊人地相似),但是我也可以告诉你如何扩展它。 此外,配置管理的紧密集成和服务模式提供了无与伦比的灵活性,以人部署该系统。

服务解决很多问题,很多开发商认为做生意的成本,即是生活的一部分错综复杂的问题。 这些问题的解决需要努力去理解,因为人们常常觉得没有问题。 在中世纪时期的城市没有污水处理系统,但他们也没有错过它。 你只错过它,一旦你已经受够了。

这就是说,并非一切都是服务。 如果API +实现是相同的,然后通过各种手段,利用图书馆。 例如,ASM库显然是应该直接但一些用作石英应该是服务背后的库。



文章来源: Why should one create & use services in OSGi
标签: java osgi