Karaf:捆绑实例和类加载器

Karaf: Bundles Instances and classloaders

每个 Karaf 包是否由单独的类加载器加载?

一个功能的所有包是否都由同一个类加载器加载?

如果我在尝试开发的新功能中包含依赖功能,该功能的捆绑包是否会使用与我尝试开发的功能相同的类加载器?

在 OSGi 中,通常每个包都有自己的 classloader。此 classloader 服务于 bundle 的 classes 并委托给 bundle 的 classloader,此 bundle 从中导入包。所以基本上每个 class 通常由 class 所在的包的 classloader 加载。Manifest 和 OSGi 解析器中的 Import-Package 和 Export-Package 语句然后确保bundle 也可以看到其他 bundle 的 classes。

Karaf 功能与 classloader 完全无关。他们只是定义加载哪些包。