资源抽象接口
JDK提供的访问资源的类 (java.net.URL File)不能很好地满足各种底层资源的访问需求, 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, 系统文件路径表示的资源.
通过WritableResource接口向文件写入数据, 然后再通过Resource接口读取文件.
ClassPathResource 类默认从maven项目的resources目录下读取配置文件.
资源加载
Spring提供了一个强大的加载资源的机制, 通过资源地址前缀标识不同的的资源类型, 支持Ant风格的带通配符的资源地址.
1.资源地址表达式
"classpath*" 相对于 "classpath" 不同. 如果多个jar包和文件系统类路径都拥有一个相同的包名. "classpath"只会在第一个加载的包的类路径下查找. "classpath*" 则会在所有类路径下所指定的包.
示例:
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.资源加载器
ResourceLoader 接口仅有一个getResource(String location)方法. 可以根据一个资源地址加载文件. 资源地址仅支持带资源类型前缀的表达式, 不支持Ant风格的资源路径表达式. ResourcePatternResolver扩展了ResourceLoader接口, 定义了一个新方法getResources(String locationPattern) ,该方法支持带资源类型前缀及Ant风格的资源路径表达式. PathMatchingResourcePatternResolver是Spring提供的标准实现类.