b spring资源(resource)加载机制&API简单介绍

2.1 介绍

Java.net.URL的不足

java 标准的java.net.URL类可以处理多重多样的URL前缀,但是对low-level资源不够友好。没有URL的实现类可以被用来从classpath加载资源或者与ServeletContext相关联。也可以来时实现处理特殊的前缀(比如http:),但是普遍是十分复杂的。URL的接口,也缺少一些功能性的方法,比如去检查资源是否存在。

2.2 Resource接口

Resource接口的定义
b spring资源(resource)加载机制&API简单介绍
它扩展了InputStreamSource接口的实现
b spring资源(resource)加载机制&API简单介绍

Resource接口中比较重要的方法

  • getInputStream()
    定位和打开resource,返回InputStream接口以读取资源。它期待每个调用都会返回一个fresh的InputStream,调用者负责关闭掉。
  • exists()
    返回boolean,表明这个资源是都被真正存在
  • isOpen()
    返回一个boolean,来明确当前的资源是否被一个打开的stream处理。true是InputStream不能被多次的读,只能读一次然后关闭掉,避免冲突。false是通用的实现,伴有异常InputStreamResource
  • getDescription()
    返回一个队资源的描述
    其他方法就是让你真实的获取URLFile文件对象(代表资源)。

通过String的path等创建一个resource
当需要资源时,Spring本身广泛使用Resource抽象作为许多方法签名中的参数类型。一些Spring API中的其他方法(例如,各种ApplicationContext实现的构造函数)采用String形式,该字符串以未经修饰或简单的形式用于创建适合于该上下文实现的Resource,或者通过String路径上的特殊前缀,让调用者指定必须创建并使用特定的资源实现。
URL更强大的替代
尽管Spring和Spring经常使用Resource接口,但实际上,在您自己的代码中单独用作通用实用工具类来访问资源也非常有用,即使您的代码不了解或不关心其他任何东西Spring的一部分。虽然这将您的代码耦合到Spring,但实际上仅将其耦合到这套实用程序类,它们充当URL的更强大替代,并且可以被认为等同于您将用于此目的的任何其他库。