18

我已经为此阅读了很多 Equinox 代码,但仍然无法找出在 Eclipse Equinox 设置中获取 osgi 包的类加载器的非 hacky 方法。有吗?

4

4 回答 4

39

在 OSGi 4.3 中,您可以使用:

bundle.adapt(BundleWiring.class).getClassLoader()
于 2013-03-07T19:59:27.970 回答
11

简短的回答(当然对于 OSGi 4.1,不确定 4.2)是您无法获得捆绑包的类加载器。但是,该Bundle接口公开了一个loadClass()方法,这将允许您编写一个类加载器来包装捆绑 API 并委托给该loadClass()方法。或者您可以节省一些时间并改用 Spring DM 的BundleDelegatingClassLoader类。

于 2009-10-01T13:42:03.463 回答
6

bundle的类加载器可以通过BundleWiring接口获取。这里有一个简短的例子:

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
于 2013-10-15T07:04:17.737 回答
2

在普通的 java 代码中,您可以获取加载给定对象的类加载器

object.getClass().getClassLoader();

甚至只是

SomeType.class.getClassLoader();

这同样适用于 Equinox,只需使用来自您感兴趣的包的对象或类型。

于 2009-10-02T02:44:16.027 回答