在我的库代码中,我使用 JAXB 从 XML 文件加载类名,以便稍后使用Class.forName()
. 一个虚构的例子来说明这个案例:
public void libraryMethod() throws Exception {
List<String> classNames = loadClassNamesFromXML();
for (String className : classNames) {
Class.forName(className).newInstance().doThings();
}
}
现在,一些用户使用 OSGi 来配置他们的应用程序,他们使用与使用我的 XML 结构配置的类不同的类加载器加载我的库。这意味着加载可能会失败,因为找不到类。
有没有更可靠的方法来加载这些类?或者有没有其他方法来配置这些实例?我愿意接受导致这种情况的建议:
public void libraryMethod() throws Exception {
// Spring does things like this:
List<SomeType> instances = loadInstancesFromXML();
for (SomeType instance : instances) {
instance.doThings();
}
}
一些限制:
- 从库的角度来看,这些实例的生命周期并不重要。如果他们有(用户)状态,我的图书馆不会注意到。
- 我想在这个库中保持简单,所以我想避免在配置框架上创建外部依赖项,例如 spring。所以我只对标准 JDK 6+ 发行版可以实现的解决方案感兴趣。
- 我真的很想保留我的简单 XML 配置文件(对 XML 结构稍作调整是可以的)。