1. OSGi 模块化的类加载机制
OSGi 模块化的类加载机制是怎样的?
- OSGi bundle 的类加载模型
- 类加载器的委托关系
- 模块可见性控制
OSGi 采用基于 bundle(模块)的类加载模型,每个 bundle 有独立的类加载器,并有自己的 Import-Package / Export-Package / Require-Bundle 声明。bundle 加载类时,遵循"类加载委托 + 模块可见性"的规则:先看自身 bundle 内是否包含该类,再看声明的 Import-Package 是否来自其他 bundle,并可委托给其他 bundle 的类加载器。OSGi 的类加载器不是简单的双亲委派,而是按 bundle 依赖图(bundle 图)进行委托,支持动态安装/卸载 bundle 而不影响其他模块。这种机制提供了模块隔离与版本控制,但类加载器数量多、依赖复杂,也带来性能与调试复杂度。
OSGi 的创新在于"模块可见性由声明控制",而非纯粹按类加载器层级。这实现了模块化、版本隔离与热插拔,代价是类加载器图复杂、易出现类加载冲突。