有没有办法告诉Spring在实例化bean时从给定的URL加载类?我需要从不在类路径中的位置加载类。如果我使用纯Java,我可以使用URLClassLoader
,但是我怎样在Spring中实现这一点?我使用Spring 3.0如何让Spring从给定的URL加载类(用于bean实例化)?
3
A
回答
4
扩展DefaultResourceLoader
可以有一个明确的ClassLoader
参考集班春全(通过DefaultResourceLoader.setClassLoader(ClassLoader)
。
AbstractApplicationContext
恰好是这些类中的一个。因此,所有的ApplicationContext实现扩展它(如ClassPathXmlApplicationContext
和FileSystemXmlApplicationContext
)可以使用注射ClassLoader
参考。
+0
谢谢Dev。感谢Tomasz以及谁在问题评论中提出了相同的解决方案。 – samitgaur
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;
}
}
相关问题
- 1. 如何使用类加载器实例化spring bean?
- 2. 何时让Spring实例化一个bean?
- 3. 如何实例化泛型spring bean?
- 4. Spring bean实例化排序
- 5. 无法从托管bean实例化Spring Bean,Spring + JSF
- 6. 如何实例化spring bean,而不从aop引用:方面
- 7. 如何从Spring获取实例化bean的列表?
- 8. 如何激活所有存在的spring实例化spring bean
- 9. Spring中的Bean实例化通知
- 10. 收集的Spring bean实例化异常
- 11. 实例化的Spring bean容器(用于测试)外
- 12. 无法实例化bean类
- 13. 关于加载spring beans,如何捕获最初加载的bean?
- 14. Spring 3 bean实例化序列
- 15. 如何在页面加载时实例化辅助bean
- 16. 加载Spring bean
- 17. Spring Mongodb-无法实例化bean类[java.util.List]:指定的类是一个接口
- 18. 如何禁用spring bean加载日志
- 19. 让Spring的IoC容器实例化零配置bean(如Google Guice的行为)
- 20. 使用Super CSV定制bean实例化
- 21. 定制的bean的实例化逻辑
- 22. 如何让JSF自动实例化会话bean
- 23. bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化Bean类
- 24. 如何基于某个类实例化特定的实现?
- 25. 无法实例化bean类:指定的类是接口
- 26. 如何让抽象类“DocumentBuilderFactory”允许实例化新实例
- 27. BeanInstantiationException:无法实例化bean类
- 28. 无法实例化bean类[org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]
- 29. 无法实例化bean类org.springframework.validation.BindingResult
- 30. 无法实例化bean类:BeanInstantiationException
什么['ClassPathXmlApplicationContext.setClassLoader()'](http://static.springsource.org/spring/docs/3.1.0.RELEASE/api/org/SP ringframework /核心/ IO/DefaultResourceLoader.html#setClassLoader(java.lang.ClassLoader的))? –
看起来很有前途,但是应用程序上下文会使用这个类加载器来加载bean类吗?它当然会用它来加载applicationContext.xml文件中指定的资源。 – samitgaur
查看[this](http://stackoverflow.com/questions/7968920)问题和...只是尝试:-)。 –