spring源码解析(1)Resource

大家知道,spring项目一般都有一个resources目录,一般存一些配置文件。

为了读取这些文件,spring设计了Resource接口,定义了三个方法?

存在?可读吗?可打开吗?

并定义了Resource对象到URL、URI和File对象和文件名字符串的转换

public interface Resource extends InputStreamSource {
    boolean exists();

    default boolean isReadable() {
        return this.exists();
    }

    default boolean isOpen() {
        return false;
    }

    default boolean isFile() {
        return false;
    }

    URL getURL() throws IOException;

    URI getURI() throws IOException;

    File getFile() throws IOException;

    default ReadableByteChannel readableChannel() throws IOException {
        return Channels.newChannel(this.getInputStream());
    }

    long contentLength() throws IOException;

    long lastModified() throws IOException;

    Resource createRelative(String var1) throws IOException;

    @Nullable
    String getFilename();

    String getDescription();
}

这个类只有一个父类,InputStreamSource,也就是说Resource可以任意向Inputstream对象来进行转化

public interface InputStreamSource {
    InputStream getInputStream() throws IOException;
}

对于不同的文件类型,都有不同的子类实现:

文件:FileSystemResource

classpath资源:ClassPathResouce

URL资源:UrlResource

InputStream资源:InputstreamResource

Byte数组:ByteArrayResource

大家最常用的应该是

Resouce resouce=new ClassPathResouce('*.properties');

InputStream in=resouce.getInputStream();

其底层是通过java提供的class或classLoader将文件对象解析成InputStream

原文地址:https://www.cnblogs.com/wangbin2188/p/15263368.html