OSGI灵活的类加载器架构,它制定了一个基于java语言的动态模块化规范。它的每一个模块都是以jar的格式进行封装(称为bundle)。一个bundle可以申明它所依赖的package,通过import导入,也可以导出发布
package.OSGI,Bunlde之间的依赖关系从传统的上层依赖于底层转变成了平级模块之间的关系。引入OSGI可以或者很可能可以实现程序的热插拔,当程序升级更新或者调试出错时,可以只停用或者启用其中一部分。
OSGI上述特点主要依赖于它的灵活的类加载架构,OSGI的类加载器之间只有规则没有委派关系,如果有bundle申明发布package,那么这个package的加载都委派给发布它bundle类加载器去加载。
举一个简单例子
BundleA:申明发布了packageA,依赖于java.*
BundleB:申明依赖了packageA和packageC,依赖于java.*
BundleC:申明发布了packageC,依赖于packageA
OSGI提供灵活性时也会产生线程死锁和内存泄露等问题。