有没有办法告诉 Spring 在实例化 bean 时从给定的 URL 加载类?我需要从不在类路径中的位置加载类。如果我使用的是纯 Java,我可以使用URLClassLoader
,但我如何在 Spring 中实现这一点?我正在使用 Spring 3.0
问问题
3407 次
2 回答
5
所有扩展的 Spring 类都DefaultResourceLoader
可以有一个显式的ClassLoader
引用集(通过DefaultResourceLoader.setClassLoader(ClassLoader)
.
AbstractApplicationContext
恰好是这些课程之一。因此,所有扩展它的 ApplicationContext 实现(如ClassPathXmlApplicationContext
和 FileSystemXmlApplicationContext
)都可以使用注入ClassLoader
引用。
于 2012-01-19T22:36:11.117 回答
0
public class Main {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AutodeployConfiguration.class);
URL[] files = {
new File("C:\\module1.jar").toURL(),
new File("C:\\propertiesdirectory\\").toURL()
};
URLClassLoader plugin = new URLClassLoader(files, Main.class.getClassLoader());
Thread.currentThread().setContextClassLoader(plugin);
Class startclass = plugin.loadClass("de.module1.YourModule");
ExternalModule start = (ExternalModule) startclass.newInstance();
AnnotationConfigApplicationContext ivr = start.onDeploy(plugin, ctx);
}
}
public class YourModule implements ExternalModule {
@Override
public AnnotationConfigApplicationContext onDeploy(ClassLoader classloader, GenericApplicationContext parent) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.setClassLoader(classloader);
applicationContext.setParent(parent);
applicationContext.register(ModuleConcreteConfiguration.class);
applicationContext.refresh();
// other code
return applicationContext;
}
}
于 2015-03-26T19:43:48.490 回答