Luk*_*der 5 java osgi classloader
在我的库的代码中,我使用 JAXB 从 XML 文件加载类名,以便稍后使用Class.forName(). 一个虚构的例子来说明这一情况:
public void libraryMethod() throws Exception {
List<String> classNames = loadClassNamesFromXML();
for (String className : classNames) {
Class.forName(className).newInstance().doThings();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,一些用户使用 OSGi 来配置他们的应用程序,他们使用与使用我的 XML 结构配置的类不同的类加载器来加载我的库。这意味着加载可能会失败,因为找不到该类。
有没有更可靠的方法来加载此类?或者还有其他方法来配置这些实例吗?我愿意接受导致此结果的建议:
public void libraryMethod() throws Exception {
// Spring does things like this:
List<SomeType> instances = loadInstancesFromXML();
for (SomeType instance : instances) {
instance.doThings();
}
}
Run Code Online (Sandbox Code Playgroud)
一些限制:
如果您希望您的库灵活并在 OSGi 和非 OSGi 环境中工作,您应该允许用户提供他们自己的类加载器,或者让他们告诉您的库他们有哪些类名。阅读尼尔·巴特利特博客文章.
原始链接返回 404。您可以在Wayback Machine 上访问该文章。