有点尴尬,我第一次浏览文档时没有找到这个。为了完整起见,回答我自己的问题。
从核心规范 PDF ...
第 3.9.9 节 - 查找对象的包
在某些情况下,无法访问捆绑上下文的代码中需要捆绑。为此,该框架提供了以下方法:
Framework Util – 通过带有 getBundle(Class) 方法的 FrameworkUtil 类。框架提供此方法以允许代码在没有获取类加载器权限的情况下查找对象的捆绑包。当类不是源自包时,该方法返回 null。
类加载器——OSGi 框架必须确保来自包的类的类加载器实现 BundleReference 接口。这允许遗留代码通过获取其类加载器并将其强制转换为 BundleReference 对象来查找对象的包,该对象提供对 Bundle 的访问。但是,这需要代码具有访问类加载器的权限。下面的代码片段展示了如何从任何对象中获取一个 Bundle 对象。
ClassLoader cl = target.getClassLoader();
if ( cl instanceof BundleReference ) {
BundleReference ref = (BundleReference) cl;
Bundle b = ref.getBundle();
...
}
在 OSGi 系统中,并非所有对象都属于该框架。因此,有可能获得一个没有实现 BundleReference 接口的类加载器,例如引导类路径加载器。