OSGI(Open Service gateway initactive)是java动态化模块系统的一系列规范。即一个系统应用上可以有很多可插拔的小应用,整个应用能运行和协调,小应用之间也可以相互交互完成业务需求。
Bundle: bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且jar包的物理边界也同时是运行时逻辑模块的封装边界。
实际工作中可以理解为bundle是一个小应用,一般是业务扩展方维护这个应用,里面有各种自身的业务逻辑和对平台应用的扩展。
OSGi框架一般如下:
Module:模块层主要涉及打包及共享的代码;
Lifecycle :生命周期层主要涉及Bundle的运行时生命周期管理;
Service:服务层主要涉及模块之间的交互和通信。
简单的来说就是平台应用和bundle应用,如何将平台应用和bundle应用整个的运行起来,其中最关键的就是对bundles的控制,包括bundle安装、开启、关闭、更新和卸载。而在实际过程中需要考虑的问题有:
- 某个类是复用平台应用的,还是bundle自身的定义的
- bundle加载的时机:有些时候bundle依赖于平台应用的某些bean才能启动;有些时候平台的某个bean也需要依赖bundle中的某个bean才能完成初始化
- bundle之间如何控制隔离和访问