Spring笔记(1)-----Spring资源访问

来源:互联网 发布:电子相册软件app排行榜 编辑:程序博客网 时间:2024/06/05 09:24

  (1) 资源抽象接口

JDK所提供的访问资源的类并不能很好的满足各种底层资源的访问需求,比如缺少从类路径或Web容器上下文中获取资源的操作类。

      而Spring 提供的资源访问类非常全,而且可以脱离框架使用。

      它设计了一个Resource接口,该接口拥有对应不同资源的实现类:

  看一下它的具体实现类:

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

  2)ClassPathResource:类路径下的资源,资源以相对于类路径的方式,如下:

public class Test {public static void main(String[] args) {String filePath = "D:/testSpace/springtest/target/classes/applicationContext.xml";Resource res1 = new FileSystemResource(filePath);Resource res2 = new ClassPathResource("/applicationContext.xml");System.out.println(res1.getFilename());System.out.println(res2.getFilename());}}
 3)FileSystemResource:文件系统资源,资源以文件系统路径的方式表示,如:D:/config/beans.xml

  4)InputStreamResource:对应一个InputStream的资源

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

6)UrlResource:封装了java.net.URL,它使用户能够访问任何可以通过URL访问的资源


有了这些资源类以后,我们就可以将Spring的配置信息放在任何地方,通过Resource接口获取资源,然后用户就可以通过Resource接口定义的多个方法访问文件的数据和其他信息。例如:getFileName()获取文件名,getInputStream获取文件的输入流。


注:资源加载时默认使用系统编码,如果资源文件采用特殊的编码方式,那么可以通过EncodedResource对资源进行编码,以保障资源内容操作的正确性。

(2) 资源加载

    Spring提供了不显式使用Resource实现类的情况下,仅通过资源地址的特殊标示就可以加载相应的资源,它提供的加载机制不但能够通过“classpath:”,"file:"等资源地址前缀识别不同的资源类型,还支持Ant风格带通配符的资源地址。

地址前缀示例对应资源类型classpath:classpath:com/test/beans.xml从类路径中加载资源file:file:/confi/com//test/beans.xml 使用UrlResource从文件系统目录中加载资源,可采用绝对或相对路径http://http://www.test.com/resource/beans.xml使用UrlResouce从Web服务器中装载资源ftp://ftp://www.test.com/resource/beans.xml使用UrlResource从FTP服务器中加载资源没有前缀com/test/beans.xml根据ApplicationContext具体实现类采用对应类型的Resource

注:classpath:和classpath*:前缀区别:

假设多个jar包或文件系统类路径都拥有一个相同的包名。classpath:只会在第一个加载的包下找对应的文件,而classpath*:回扫描所有这些jar包。


Ant风格资源地址支持3种匹配符:

?:匹配文件名中的一个字符,如classpath:com/t?st.xml 可以匹配类路径下com/test.xml或com/tast.xml

 *:匹配文件名中任意个字符,如:file:/D:/conf/*.xml匹配D:/conf下的所有xml后缀的文件

**:匹配多层路径:如classpath:com/**/test.xml匹配com类路径下的test.xml


资源加载器

Spring定义了一套资源加载的接口,并提供了实现类:

ResourceLoader:该接口仅提供了一个getResource(String location)方法,可以根据一个资源地址加载资源文件,不过资源地址仅支持带资源类型前缀的表达式,不支持Ant风格的资源类型表达式。

ResourcePatternResolver:扩展了ResourceLoader接口,定义了一个新的接口方法:getResources(String locationPattern),该方法支持带资源类型前缀和Ant风格的资源路径的表达式。

PathMatchingResourcePatternResolver是Spring提供的标准实现类,例如:

public class Test1 {public static void main(String[] args) {ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();try {Resource[] resources = resolver.getResources("classpath*:applicationContext.xml");for(Resource res:resources){System.out.println(res.getDescription());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}





0 0
原创粉丝点击