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?