有沒有辦法告訴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)問題和...只是嘗試:-)。 –