【发布时间】:2010-12-02 23:07:38
【问题描述】:
我已经为此阅读了很多 Equinox 代码,但仍然无法找到一种在 eclipse Equinox 设置中获取 osgi 包的类加载器的简单方法。有吗?
【问题讨论】:
标签: eclipse osgi classloader bundle equinox
我已经为此阅读了很多 Equinox 代码,但仍然无法找到一种在 eclipse Equinox 设置中获取 osgi 包的类加载器的简单方法。有吗?
【问题讨论】:
标签: eclipse osgi classloader bundle equinox
简短的回答(当然对于 OSGi 4.1,不确定 4.2)是您无法获得捆绑包的类加载器。然而Bundle 接口公开了一个@987654321@ 方法,这将允许您编写一个类加载器来包装捆绑API 并委托给该loadClass() 方法。或者您可以节省一些时间并改用 Spring DM 的 @987654322@ 类。
【讨论】:
在普通的java代码中,你可以得到加载给定对象的类加载器
object.getClass().getClassLoader();
甚至只是
SomeType.class.getClassLoader();
同样适用于 Equinox,只需使用来自您感兴趣的包的对象或类型。
【讨论】:
在 OSGi 4.3 中,您可以使用:
bundle.adapt(BundleWiring.class).getClassLoader()
【讨论】:
bundle的类加载器可以通过BundleWiring接口获取。这是一个简短的例子:
Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
【讨论】: