spring的ioc之Resource

转载 2016年06月01日 21:55:09

Spring的Resource接口位于包org.springframework.core.io中;

 

Spring定义Resource接口是为了提供更强的访问底层资源能力的抽象;

 

对spring来说Resource接口代表着物理存在的任何资源。

 

先看一下resource接口及其实现的类层次关系图:
对应的UML类图为:

 其中,最常用的有四个:

ClassPathResource:通过 ClassPathResource 以类路径的方式进行访问;

FileSystemResource:通过 FileSystemResource 以文件系统绝对路径的方式进行访问;

ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问;

UrlResource :通过java.net.URL来访问资源,当然它也支持File格式,如“file:”。

1、先看一下Resource接口的定义:
Java代码  收藏代码
  1. public interface Resource extends InputStreamSource {  
  2.     boolean exists();  
  3.     boolean isReadable();  
  4.     boolean isOpen();  
  5.     URL getURL() throws IOException;  
  6.     URI getURI() throws IOException;  
  7.     File getFile() throws IOException;  
  8.     long contentLength() throws IOException;  
  9.     long lastModified() throws IOException;  
  10.     Resource createRelative(String relativePath) throws IOException;  
  11.     String getFilename();  
  12.     String getDescription();  
  13. }  

 

它是spring访问资源最基本的接口。实际访问的时候直接用Resource接口就可以,不必使用其子类。其实经常用到的(resource的真正目的)方法是public InputStream getInputStream()

 

2、FileSystemResource
Java代码  收藏代码
  1. public InputStream getInputStream() throws IOException {  
  2.              return new FileInputStream( this. file);  
  3.       }  

 

这里的file是使用传入(构造函数中)的path生成的File,然后使用该File构造FileInputStream作为方法的输出。

 

这里的path一般要给出绝对路径,当然也可以是相对路径,如果是相对路径要注意其根目录。例如在eclipse中,它的根目录就是你工程目录作为你的根目录。

 

3、ClassPathResource

 

Java代码  收藏代码
  1. public InputStream getInputStream() throws IOException {  
  2.             InputStream is;  
  3.              if ( this. clazz != null) {  
  4.                   is = this. clazz.getResourceAsStream( this. path);  
  5.             }  
  6.              else {  
  7.                   is = this. classLoader.getResourceAsStream( this. path);  
  8.             }  
  9.              if (is == null) {  
  10.                    throw new FileNotFoundException(getDescription() + " cannot be opened because it does not exist");  
  11.             }  
  12.              return is;  
  13.       }  

 

 这里是通过Class或者ClassLoader的getResourceAsStream()方法来获得InputStream的。其path一般都是以“classpath:”开头,如果以“classpath*:”开头表示所有与给定名称匹配的classpath资源都应该被获取。

 

4、ServletContextResource

 

Java代码  收藏代码
  1. public InputStream getInputStream() throws IOException {  
  2.         InputStream is = this.servletContext.getResourceAsStream(this.path);  
  3.         if (is == null) {  
  4.             throw new FileNotFoundException("Could not open " + getDescription());  
  5.         }  
  6.         return is;  
  7.     }  

 

ServletContextResource通过ServletContext的getResourceAsStream()来取得InputStream,这里path必须以“/”开头,并且相对于当前上下文的根目录。如常用的path="/WEB-INF/web.xml"。

 

5、UrlResource

 

Java代码  收藏代码
  1. public InputStream getInputStream() throws IOException {  
  2.             URLConnection con = this. url.openConnection();  
  3.             ResourceUtils. useCachesIfNecessary(con);  
  4.              try {  
  5.                    return con.getInputStream();  
  6.             }  
  7.              catch (IOException ex) {  
  8.                    // Close the HTTP connection (if applicable).  
  9.                    if (con instanceof HttpURLConnection) {  
  10.                         ((HttpURLConnection) con).disconnect();  
  11.                   }  
  12.                    throw ex;  
  13.             }  
  14.  }  

 

 UrlResource 封装了java.net.URL,它能够被用来访问任何通过URL可以获得的对象,例如:文件、HTTP对象、FTP对象等。

 

所有的URL都有个标准的 String表示,这些标准前缀可以标识不同的URL类型,包括file:访问文件系统路径,http: 通过HTTP协议访问的资源,ftp: 通过FTP访问的资源等等。

 

在Spring配置文件中,我们只需要给出字符串类型的path即可,Spring会通过ResourceEditor(java.beans.PropertyEditor的子类)和ResourceLoader把给定的path转换为相应的Resource。

 

转换规则如下:


相关文章推荐

Spring源码阅读之IoC容器初始化1 -- Resource定位

注1:Spring源码基于Spring3.1版本 注2:参考《Spring技术内幕》第二版 1、Spring IoC容器初始化 Spring IoC容器的初始化包括BeanDefin...

深探spring系列-----ioc初始化(1)BeanDefinition的Resource定位

1.前言 ioc就不说了 大家都知道。不知道的童鞋可以出门右转百度,google,简书总有一款适合你! 说说BeanDefinition 这个是ioc非常重要一个组件,实际就是pojo对象在io...

【Spring Framework 深入】—— IoC容器初始化 -> Bean定义资源的Resource定位

IoC与容器初始化三步曲之Resource定位

Spring-IoC

  • 2017-07-19 21:27
  • 11KB
  • 下载

spring-IOC教程

  • 2017-08-21 23:27
  • 1.22MB
  • 下载

Spring5:@Autowired注解、@Resource注解和@Service注解

Spring5:@Autowired注解、@Resource注解和@Service注解 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个...

02_spring核心技术-IOC.ppt

  • 2013-12-30 16:21
  • 432KB
  • 下载

spring、ioc、aop、callback

  • 2012-10-23 21:59
  • 5.18MB
  • 下载

spring---注解@Resource和@Autowired

我不生产代码,我只是代码的搬运工。谢谢。 转载自http://www.cnblogs.com/AloneSword/p/3370462.html spring2.5...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)