首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

【第四章】 资源 之 4.4 Resource通配符路径 ——跟小弟我学spring3

2012-06-28 
【第四章】 资源 之 4.4 Resource通配符路径 ——跟我学spring34.4.1? 使用路径通配符加载Resource?????? 前面

【第四章】 资源 之 4.4 Resource通配符路径 ——跟我学spring3

4.4.1? 使用路径通配符加载Resource

?????? 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源。

?

?????? Ant路径通配符支持“?”、“*”、“**”,注意通配符匹配不包括目录分隔符“/”:

?

? ? ? ? ?“?”:匹配一个字符,如“config?.xml”将匹配“config1.xml”;

? ? ? ? ?“*”:匹配零个或多个字符串,如“cn/*/config.xml”将匹配“cn/javass/config.xml”,但不匹配匹配“cn/config.xml”;而“cn/config-*.xml”将匹配“cn/config-dao.xml”;

? ? ? ? ?“**”:匹配路径中的零个或多个目录,如“cn/**/config.xml”将匹配“cn /config.xml”,也匹配“cn/javass/spring/config.xml”;而“cn/javass/config-**.xml”将匹配“cn/javass/config-dao.xml”,即把“**”当做两个“*”处理。

?

Spring提供AntPathMatcher来进行Ant风格的路径匹配。具体测试请参考cn.javass.spring.chapter4. AntPathMatcherTest。

?

Spring在加载类路径资源时除了提供前缀“classpath:”的来支持加载一个Resource,还提供一个前缀“classpath*:”来支持加载所有匹配的类路径Resource。

?

Spring提供ResourcePatternResolver接口来加载多个Resource,该接口继承了ResourceLoader并添加了“Resource[] getResources(String locationPattern)”用来加载多个Resource:

?

InputStream is = new FileInputStream(new File("conf/beans.xml")); Resource resource = new InputStreamResource(is); BeanFactory beanFactory = new XmlBeanFactory(resource);

   spring文档也说,这是个 已经 打开资源的描述符-因此 isOpen() 函数返回 true。 如果你需要在其它位置保持这个资源的描述符或者多次读取一个流,请不要使用它。

  我的问题是:怎么怎么理解InputStreamResource只能读取一次呢? 是不是因为构造InputStreamResource的时候,资源(假设是Xml配置文件)已经被打开了,返回一个InputStream字节流,因为这个资源没有被关闭,spring需要再次读取资源(Xml配置文件)验证xml schema 语法, 以致构造XmlBeanFactory抛异常? 如果是这样,spring怎么不直接读取这个返回的InputStream字节流呢?
  
  使用InputStreamResource构造XmlBeanFactory抛异常, 是spring1.x和spring2.x版本差异导致的问题吗?

我这里说的只能读取一次意思是
InputStream 这个流读完后 不能返回到流开头(重新读,即不reset,所以只能读取一次【如果还需使用需要再创建一个】),表达的不好,请见谅 3 楼 zuisanlang 2012-06-21   博主,能再详细解释一下下面这段话的意思吗?

在“com.springsource.cn.sf.cglib-2.2.0.jar”里包含“asm-license.txt”文件,对于使用“classpath*: asm-*.txt”进行通配符方式加载资源将什么也加载不了“asm-license.txt”文件,注意一定是模式路径匹配才会遇到这种问题。这是由于“ClassLoader”的“getResources(String name)”方法的限制,对于name为“”的情况将只返回文件系统的类路径,不会包换jar包根路径。

我们是想加载“asm-license.txt”文件,如果使用“classpath*: asm-*.txt”作为通配符的话,跟你后面说的name为“”的情况有什么关系?

热点排行