Spring把所有记录信息的载体,例如各种类型的文本配置文件,二进制文件, 网络资源等都统一做了一个高度的抽象,称为资源(Resources)。Spring中最常见的就是xml配置文件和properties配置文件。
Spring为资源访问提供了Resource接口,该接口提供了强大的资源范问能力,例如检查资源是否存在,获取资源对应的文件等。
Resource提供了一系列资源访问方法
boolean exists(); 判断资源是否存在
InputStream getInputStream(); 定位并打开资源,返回资源对应的输入流。每次调用都返回新的输入流。调用者必须负责关闭输入流
boolean isOpen(); 返回资源文件是否打开,如果资源文件不能多次读取,每次读取结束应该显式关闭,以防止资源泄漏
URL getURL(); 获取网络资源的URL
File getFile(); 资源对应的文件对象 ·
String getFilename(); 获取资源对应的文件名
Resource没有提供访问任何底层资源的实现逻辑。针对不同的底层资源,Spring提供不同的Resource实现类,不同的实现类负责不同的资源访问逻辑。
Resource不仅仅是在Spring中使用,也可以单独作为资源访问的工具。虽然这样会使代码与Spring有一定耦合,但这只是对一小块模块的依赖,不会造成太大的代码污染。
Resource实现类
Resource本身不提供具体的资源访问逻辑,针对不同的资源,Spring提供了不同的Resource实现类来处理不同的资源处理逻辑。
Spring提供了如下几种Resource实现类
- UrlResource 负责访问网络资源,通常以http、ftp为地址前缀
- ClassPathResource 负责访问类路径下的资源,例如以classpath*开头的
- FileSystemResource 负责访问本地文件系统的资源
- ByteArrayResource 负责访问字节组形式的资源
- ByteArrayResource 负责访问输入流的资源
这些实现类,针对不同的底层资源,提供了不同的访问逻辑。