标签:undle 依赖 nbsp 今天 cli java包 了解 世纪 隐藏
OSGi(Open Service Gateway Initative)会带来生态系统吗?这个问题值得探讨。
OSGi并不是新鲜的事物,它从20世纪90年代就存在了。
OSGi是Java平台上的动态模块系统,但是它并没有被广泛地采用。
模块化并不是新的理念,OSGi也不是。
OSGi是成熟稳定的规范。
多年以来,OSGi技术在嵌入式系统以及网络设备市场上大放异彩,而对企业级的开发人员来说,OSGi依然是一种相对陌生的技术。
使用OSGI的平台有:
Eclipse
在2003年,Eclipse团队在寻找使Eclipse更动态化的方式。他们的决定是使用OSGi创建支持插件(plug-in)架构的富客户端平台,这是我们今天所了解的生态系统的第一步。开发人员使用Eclipse的一个原因就是有大量可用的插件,这些插件可以让他们高效的完成工作。其他开发人员创建Eclipse插件的原因是Eclipse是被众多开发人员广泛使用的IDE。同样的,生态系统养活了自己。Eclipse团队提供了如今的Eclipse生态系统赖以发展的环境。
关于Eclipse和OSGi的历史,可以参考:https://www.eclipse.org/equinox/documents/transition.html
Atlassian
Atlassian插件框架(Atlassian plugin framework)是另一个使用功能OSGi的样例。
Liferay7.0开始引入
OSGi原理:
OSGi中的每个模块(bundle)都包含Java包和类。模块可以声明它所依赖的需要导入(import)的其它模块的Java包和类(通过Import-Package),也可以声明导出(export)自己的包和类,供其它模块使用(通过Export-Package)。也就是说,需要能够隐藏和共享一个模块中的某些Java包和类。这是通过OSGi特有的类加载器机制来实现的。OSGi中的每个模块都有对应的一个类加载器。它负责加载模块自己包含的Java包和类。当它需要加载Java核心库的类时(以java开头的包和类),它会代理给父类加载器(通常是启动类加载器)来完成。当它需要加载所导入的Java类时,它会代理给导出此Java类的模块来完成加载。模块也可以显式的声明某些Java包和类,必须由父类加载器来加载。只需要设置系统属性org.osgi.framework.bootdelegation的值即可。
标签:undle 依赖 nbsp 今天 cli java包 了解 世纪 隐藏
原文地址:https://www.cnblogs.com/etbird/p/14406691.html