Spring给我们提供了一个Resource接口来统一访问底层资源。Resource接口继承InputStreamSource接口,提供了以下的方法:
exists:返回当前Resource代表的底层资源是否存在,true表示存在。
isReadable:返回当前Resource代表的底层资源是否可读,true表示可读。
isOpen:返回当前Resource代表的底层资源是否已经打开,如果返回true,则只能被读取一次然后关闭以避免资源泄露;常见的Resource实现一般返回false。
getURL:如果当前Resource代表的底层资源能由java.util.URL代表,则返回该URL,否则抛出IOException。getURI:如果当前Resource代表的底层资源能由java.util.URI代表,则返回该URI,否则抛出IOException。
getFile:如果当前Resource代表的底层资源能由java.io.File代表,则返回该File,否则抛出IOException。contentLength:返回当前Resource代表的底层文件资源的长度,一般是值代表的文件资源的长度。
lastModified:返回当前Resource代表的底层资源的最后修改时间。createRelative:用于创建相对于当前Resource代表的底层资源的资源,比如当前Resource代表文件资源“d:/test/”则createRelative(“test.txt”)将返回表文件资源“d:/test/test.txt”Resource资源。
getFilename:返回当前Resource代表的底层文件资源的文件路径,比如File资源“file://d:/test.txt”将返回“d:/test.txt”,而URL资源http://www.javass.cn将返回“”,因为只返回文件路径。getDescription:返回当前Resource代表的底层资源的描述符,通常就是资源的全路径(实际文件名或实际URL地址)。
Resource接口提供了足够的抽象,足够满足我们日常使用。而且提供了很多内置Resource实现:ByteArrayResource、InputStreamResource 、FileSystemResource 、UrlResource、ClassPathResource、ServletContextResource、VfsResource等。
ByteArrayResource:isOpen()永远返回false,可以多次读取。
InputStreamResource: isOpen()返回true,只能一次读取。
FileSystemResource :isOpen()永远返回false,可以多次读取。
ClassPathResource : isOpen()永远返回false,可以多次读取。3种构造方法:
①: public ClassPathResource(String path)
②: public ClassPathResource(String path, ClassLoader classLoader)
③: public ClassPathResource(String path, Class<?> clazz)
UrlResource: isOpen()永远返回false,可以多次读取。3种资源访问:
①:http:通过标准的http协议访问web资源,如new UrlResource(“http://地址”)
②: ftp:通过ftp协议访问资源,如new UrlResource(“ftp://地址”)
③: file:通过file协议访问本地文件系统资源,如new UrlResource(“file:d:/test.txt”)
ResourceLoader接口用于返回Resource对象;其实现可以看作是一个生产Resource的工厂类。
原理:getResource接口用于根据提供的location参数返回相应的Resource对象;而getClassLoader则返回加载这些Resource的ClassLoader。
DefaultResourceLoader能返回
ClassPathResource、UrlResource;
还提供一个用于web环境的ServletContextResourceLoader,
它继承了DefaultResourceLoader
ResourceLoader接口用于返回Resource对象;其实现可以看作是一个生产Resource的工厂类。
原理:getResource接口用于根据提供的location参数返回相应的Resource对象;而getClassLoader则返回加载这些Resource的ClassLoader。
的所有功能,又额外提供了获取ServletContextResource的支持。
<bean id = "BeanName" class = "要注入的类 ">
<property name ="要注入类中的属性" value="资源路径"/>
</bean>
注入Resource数组:
<bean id = "BeanName" class = "要注入的类 ">
<property name ="要注入类中的属性>
<array>
<value>"资源路径"</value>
<value>"资源路径"</value>
</array>
</property>
</bean>
使用路径通配符加载Resource:
“?”:匹配一个字符,如“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”,即把“**”当做两个“*”处理。