Spring资源访问接口------------Resource

资源抽象接口

JDK提供的访问资源的类 (java.net.URL  File)不能很好地满足各种底层资源的访问需求, Spring设计了一个Resource接口, 提供了更强的底层资源访问能力.  Spring的Resource接口及其实现类可以在脱离Spring框架的情况下使用.

Resource接口及其实现类示意图:

Spring资源访问接口------------Resource

WritableResource: 可写资源接口, Spring 3.1 版本新加的接口, 有两个实现类, 即FileSystemResource 和 PathResource ,  PathResource是Spring4.0提供的实现类.

ByteArrayResource:  二进制数组表示的资源, 二进制数组资源可以在内存中通过程序构造.

ClassPathResource:  类路径下的资源, 资源以相对于类路径的方式表示.

FileSystemResource: 文件系统资源, 资源以文件系统路径的方式表示.

InputStreamResource: 以输入流返回表示的资源.

ServletContextResource: 为访问Web容器上下文中的资源所设计的类, 负责以相对于Web应用根目录的路径加载资源.

UrlResource: URL封装了java.net.URL , 它使用户能够访问任何可以通过URL表示的资源. 如文件系统的资源, HTTP资源.

PathResource: Spring4.0提供的读取文件资源的新类. 它使用户能够访问任何可以通过URL, Path, 系统文件路径表示的资源.

Spring资源访问接口------------Resource

Spring资源访问接口------------Resource

通过WritableResource接口向文件写入数据, 然后再通过Resource接口读取文件.

ClassPathResource 类默认从maven项目的resources目录下读取配置文件.

资源加载

Spring提供了一个强大的加载资源的机制, 通过资源地址前缀标识不同的的资源类型, 支持Ant风格的带通配符的资源地址.

1.资源地址表达式

Spring资源访问接口------------Resource

"classpath*" 相对于 "classpath" 不同. 如果多个jar包和文件系统类路径都拥有一个相同的包名. "classpath"只会在第一个加载的包的类路径下查找. "classpath*" 则会在所有类路径下所指定的包.

Spring资源访问接口------------Resource 

示例:

classpath: com/t?st.xml:  匹配com路径下的  com/test.xml  com/tast.xml

file: D:/conf/*.xml  匹配文件系统 D:/conf目录下所有以 .xml 后缀结尾的文件

classpath: com/**/test.xml  匹配com路径下(当前目录及其子孙目录) 所有的 test.xml 文件.

classpath: com/springframework/**/*.xml  匹配类路径com/springframework 目录下所有以 .xml 结尾的文件

classpath: org/**/servlet/test.xml  匹配类路径 org/springframework/servlet/test.xml org/springframework/config/servlet/test.xml  

2.资源加载器

Spring资源访问接口------------Resource

ResourceLoader 接口仅有一个getResource(String location)方法. 可以根据一个资源地址加载文件. 资源地址仅支持带资源类型前缀的表达式, 不支持Ant风格的资源路径表达式.  ResourcePatternResolver扩展了ResourceLoader接口, 定义了一个新方法getResources(String locationPattern) ,该方法支持带资源类型前缀及Ant风格的资源路径表达式.  PathMatchingResourcePatternResolver是Spring提供的标准实现类.