为什么要使用OSGi?

19

我想知道在构建Java应用程序时为什么要使用OSGI框架。我正在网上搜索,但答案对我来说看起来很复杂。请问有人能够解释一下为什么我们需要采用OSGI吗?

如果这个问题不适合stackoverflow,我很抱歉。感谢读者的耐心。谢谢。


1
这有帮助吗 --> https://dev59.com/40rSa4cB1Zd3GeqPXZGh - Jayan
请阅读此处的非常好的描述:http://blog.springsource.com/2008/05/15/why-should-i-care-about-osgi-anyway/ - Cris
2
可能是OSGi解决了什么问题?的重复。 - Martin
5个回答

17

OSGi 提供了模块化系统,支持模块版本控制和一定程度的生命周期管理。它可以管理模块间依赖关系、动态/惰性启动/卸载模块、查找/发现等。

其中部分功能将成为 Java 语言的一部分。相比于类的混乱连线,它提供了更少的复杂性。


8

在我看来,OSGI本身需要大量样板代码才能实现其功能。但是,如果您使用像Karaf和iPOJO这样的库,大部分开销都会被隐藏,您将获得大部分好处。

主要好处是能够控制使用哪些版本并进行适当的模块隔离。例如,您可以:

  • 让容器从类似nexus的maven存储库中下载正确的版本。
  • 使用同一库的多个版本,并使需要使用它们的模块使用正确的版本。
  • 在应用程序运行时停止、升级和启动模块。
  • 使用Web控制台查看所有模块的状态并集体或单独管理它们。

2

1
OSGi是一个快速的框架,因为它通过预定义的xml文件知道哪些服务将加载到OSGi环境中。它通过惰性状态减少了运行时成本。当需要时才创建服务实例。同一时间,其他bundle可以使用某个bundle的不同版本。由于每个插件都有自己的类加载器,任何bundle都可以在不停止Java虚拟机的情况下停止、启动、安装或卸载。在OSGi环境中,可以通过使用声明式服务或服务跟踪器和接口进行bundle之间的通信。经常使用接口为可重用代码铺平了道路。尽管OSGi框架包含了相当多的类和接口,但是可以通过使用它创建强大的项目。由于Java可以运行在任何地方,因此OSGi也可以运行。

1
仔细阅读教程,你可能会找到答案。

链接无法使用。你有类似的教程吗? - Saurabh Ande

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接