Spring 运行中 动态加载xml并实例化Bean
2015-10-16 13:27
537 查看
工作中总有各种各样另类问题发生,比如像我遇到的需要动态加载指定jar文件并实例化运行。拿到这个问题,主要问题就是
动态指定的jar文件不存在于classpath中,如何让Spring知道并引用
都知道jvm是通过classloader加载class,并且是通过加载当前类的classloader加载本class应用的class(有些拗口),当加载本类的classloader找不到再用父类加载。(细流程可参见网上其他分享)
需要做的就是 使用指定的ClassLoader并添加到系统classPath中。所以如下
ClassLoaderUtil 工具类添加指定路径jar到classpath。
动态指定的jar文件不存在于classpath中,如何让Spring知道并引用
都知道jvm是通过classloader加载class,并且是通过加载当前类的classloader加载本class应用的class(有些拗口),当加载本类的classloader找不到再用父类加载。(细流程可参见网上其他分享)
需要做的就是 使用指定的ClassLoader并添加到系统classPath中。所以如下
private void loadXml(String jarPath) { try { ClassLoaderUtil.addUrlToClassPath(new URL("file:" + jarPath), Thread.currentThread().getContextClassLoader().getSystemClassLoader()); } catch (MalformedURLException e) { e.printStackTrace(); } XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader( (BeanDefinitionRegistry) ((ConfigurableApplicationContext) applicationContext).getBeanFactory()); beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(applicationContext)); logger.info("loading ......"); // 将jar文件添加到classpath中后,就可以通过Spring工具类,找到jar文件下的xml文件。 org.springframework.core.io.Resource resouce = new ClassPathResource("spring-executor.xml"); beanDefinitionReader.loadBeanDefinitions(resouce); logger.info(resouce); }
ClassLoaderUtil 工具类添加指定路径jar到classpath。
public class ClassLoaderUtil { public static void addUrlToClassPath(URL url, ClassLoader classLoader) { Method addURL_method = ReflectionUtils.findMethod(classLoader.getClass(), "addURL",new Class[]{URL.class}); ReflectionUtils.makeAccessible(addURL_method); try { addURL_method.invoke(classLoader, new Object[]{url}); } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- XML 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- C#动态创建button的方法
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- C#动态调整数组大小的方法
- C#针对xml基本操作及保存配置文件应用实例
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- EBS xml publisher中文乱码问题及解决办法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- 关于SQLServer2005的学习笔记 XML的处理