如何获得类加载器在春分捆绑?(How to get classloader for a bundle

2019-07-20 09:32发布

I have read a lot of equinox code for this, but still can't figure out a non-hacky way of getting the classloader for a osgi bundle in eclipse equinox setup. Is there one?

Answer 1:

简短的回答(当然OSGi的4.1,不知道4.2)是你不能让一个包的类加载器。 然而, Bundle接口公开loadClass()方法,这将让你写一个包装束API,并委托给一个类加载器loadClass()方法。 或者你也可以节省一些时间和使用Spring DM的BundleDelegatingClassLoader类代替。



Answer 2:

在OSGi的4.3,你可以使用:

bundle.adapt(BundleWiring.class).getClassLoader()


Answer 3:

束的类加载器可以通过BundleWiring接口来获得。 这里一个简单的例子:

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();


Answer 4:

在普通的Java代码,你可以得到的类加载器加载给定对象与

object.getClass().getClassLoader();

甚至只是

SomeType.class.getClassLoader();

这同样适用于春分,只需使用一个对象或类型来自于你感兴趣的包。



文章来源: How to get classloader for a bundle in equinox?