文章目录
2.3 内建资源的实现
resource的实现
- UrlResource
- ClassPathResource
- FileSystemResource
- ServletContextResource
- InputStreamResource
- ByteArrayResource
2.3.1 UrlResource
UrlResource
包装了java.net.URL
,可以用来获取任何用URL
方式获取的资源,例如files,和HTTP target,FTP方向。所有的URLS都有标准的String
代表。例如 file:
和http:
和ftp:
。
一个UrlResurce的创建可以用java code 精准的创建。稍后的例子中,一个javaBeans的PropertyEditor
会决定到底哪一种资源会被加载。如果一个自愿的前缀是classpath
,它会创建一个特殊的Resource。但是如果当不能识别初始,会被当做成一个普通的URL.
2.3.2 ClassPathResource
这个类代表了可以从classpath获取的类。他使用 thread
context class loader–一个被给予的class loader或者类来加载资源
这个Resource的实现支持java.io.file
-当不在classpath目录下时。这种Resource
的实现总是支持java.net.URL
。
Java代码通过显式使用ClassPathResource构造函数来创建ClassPathResource,但通常在调用带有String参数表示路径的API方法时隐式创建ClassPathResource。对于后一种情况,JavaBeans PropertyEditor会识别字符串路径上的特殊前缀classpath:,并在这种情况下创建ClassPathResource。
2.3.3. FileSystemResource
这是java.io.File和java.nio.file.Path句柄的Resource实现。它支持解析为文件和URL。
2.3.4. ServletContextRes
这是ServletContext资源的Resource实现,用于解释相关Web应用程序根目录中的相对路径。
它始终支持stram访问和URL访问,但仅在扩展Web应用程序档案且资源实际位于文件系统上时才允许java.io.File访问。它是在文件系统上扩展还是直接扩展,或者是否可以直接从JAR或其他类似数据库(可以想到的)中访问,实际上取决于Servlet容器。
2.3.5 InputStreamResource
InputStreamResource是给定InputStream的Resource实现。仅当没有特定的资源实现适用时才应使用它。特别是,尽可能选择ByteArrayResource或任何基于文件的Resource实现。
与其他Resource实现相反,这是一个已经打开的资源的描述符。因此,它从isOpen()返回true。如果您需要将资源描述符保存在某个地方或者需要多次读取流,请不要使用它
2.3.6. ByteArrayResource
这是给定字节数组的Resource实现。它为给定的字节数组创建一个ByteArrayInputStream。
这对于从任何给定的字节数组加载内容很有用,而不必求助于一次性InputStreamResource。