什么是OSGi以及它使用的一些例子?

我刚开始听到OSGi这个术语的使用(在阅读常见的Java EE容器如GlassFish和Spring的教程时),但是我一直无法find一个简单,直接,易于理解的解释OSGi是像我这样的企业新手会理解的。

有人可以提供这样的防伪解释吗? 也许有一些例子,甚至代码摘录?

谢谢!

简单地说,OSGi是一个Java的dynamic模块系统。 它定义了安装,卸载,更新,启动和停止模块的方法。 这些模块被称为包,但最简单的forms,实际上是具有特殊Manifest的Java jar文件。 可以安装,卸载模块,而无需停止或重新启动Java VM。

OSGi框架以安全的方式pipe理所描述的bundle之间的生命周期和依赖关系。 一个bundle需要声明它输出的是哪个Java包,以及它input的是哪个Java包。 导入和导出语句可以使用版本信息进行注释,这样甚至可以在同一个Java VM中拥有同一个包的多个版本。

OSGi联盟是指定OSGi框架和许多伴随服务的组织,例如pipe理configuration数据,设备访问等。

这只是一个非常基本的概述。 OSGi更多。 请看https://www.osgi.org/developer/architecture/(OSGi的体系结构介绍)和https://www.osgi.org/developer/where-to-start/ (很多链接以及OSGi联盟推荐的进一步阅读)。

以一些倒票为代价;-),我想用我自己的话来回答这个问题(这样我可以根据自己的理解来纠正)。

我们将应用程序作为一组模块来构build,每个模块本身在function上是内聚的,并与其他模块松散耦合。 这有很多好处,你可能已经知道了。 加class时间,模块化的单位已经从function到类,包到部署单元(如Java中的jar和.Net中的程序集)。 但是所有这些只是在开发期间,一旦部署了应用程序(这是一组模块),服务器仍然将其视为一个巨大的单一应用程序,即在运行时不保留逻辑边界。 OSGi使这些边界在开发过程中以及运行时显式地分开,除了这里概述的其他好处之外

我build议这个优秀的免费书籍,让你开始OSGi的实践

如果您在Java平台上工作,请查看以下演示文稿: 为什么OSGi规范基于Java™技术?