需要做configuration的模块,研究了list的用法,在帖子"Spring的Resource配置"
(http://blog.csdn.net/inthirties/archive/2009/08/27/4490407.aspx)已经提到过,
注意:
今天遇到一个问题, PathMatchingResourcePatternResolver.getResources()时总时找不到jar包中的资源, 但在IDE工程中却没有问题, 足足困扰了5个小时, 经过一番仔细研究发现问题出在打jar上, 原因是利用eclipse的export打jar包没有建立实体目录, 导出时记得钩选"Add directory entries"选项就解决问题, 如图:
![Spring PathMatchingResourcePatternResolver查找jar包资源找不到的原因 - 村里MU地 - 村里MU地 Spring PathMatchingResourcePatternResolver查找jar包资源找不到的原因 - 村里MU地 - 村里MU地](http://img9.ph.126.net/K6Vv1uJY3r6sILOA5dkLlw==/2548474439156187279.jpg)
觉得spring这个功能还不错,所以那到代码看了看其中的实现,找到了PathMatchingResourcePatternResolver
这个类,这个类的接口如下
public Resource getResource(String location)
public ResourceLoader getResourceLoader()
public Resource[] getResources(String locationPattern)
public PathMatcher getPathMatcher()
这里的getResources和getResource就是spring处理list的resouce查找的实现类。
这里可以支持文件和classpath的查找方式。
看他的文档,支持
No Wildcards:
如果不是以classpath*:开头的话,他就不会使用PathMatcher pattern,
file:C:/context.xml
classpath:/context.xml
/WEB-INF/context.xml -- 这个会使用到特定的ServletContextResource for a WebApplicationContext
Ant-style pattern:
支持Ant style pattern
/WEB-INF/*-context.xml
com/mycompany/**/applicationContext.xml
file:C:/some/path/*-context.xml
classpath:com/mycompany/**/applicationContext.xml
classpath*: Prefix
这个是最强的classpath*:
classpath*:META-INF/*-beans.xml
classpath*:com/**/Driver.class
通过这些方式,我们做lookup resouce就很方便了
sample代码
PathMatchingResourcePatternResolver resolover = new PathMatchingResourcePatternResolver();
try
{
Resource[] resources = null;
resources = resolover.getResources("file:E:/information/personal/workspace/poc/synchrophy/framework/src/test/synchrophy/com/sunvalley/framework/test/configuration/init*.properties");
System.out.println(resources.length);
resources = resolover.getResources("classpath*:/com/**/Driver.class");
System.out.println(resources.length);
resources = resolover.getResources("classpath*:/META-INF/*.schemas");
System.out.println(resources[0].getURL());
resources = resolover.getResources("classpath*:com/synchrophy/**/*ui.properties");
System.out.println(resources.length);
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}