Spring Framework Resources
in with 0 comment

Spring Framework Resources

in with 0 comment

介绍

Resource 是 Spring 对于底层资源的一个封装,它可以简化我们的开发

Resource 接口

SpringResource 接口位于 org.springframework.core.io 包,旨在成为一个更强大的接口,用于抽象对低级资源的访问

public interface Resource extends InputStreamSource {

    boolean exists();

    boolean isReadable();

    boolean isOpen();

    boolean isFile();

    URL getURL() throws IOException;

    URI getURI() throws IOException;

    File getFile() throws IOException;

    ReadableByteChannel readableChannel() throws IOException;

    long contentLength() throws IOException;

    long lastModified() throws IOException;

    Resource createRelative(String relativePath) throws IOException;

    String getFilename();

    String getDescription();
}
public interface InputStreamSource {

    InputStream getInputStream() throws IOException;
}

getInputStream():定位并打开资源,返回一个 InputStream 用于从资源中读取。 预计每次调用都会返回一个新的 InputStream。 调用者有责任关闭流。

exists():返回一个布尔值,指示此资源是否存在。

isOpen():代表的底层资源是否已经打开,如果返回 true,则只能被读取一次然后关闭以避免资源泄露;常见的 Resource 实现一般返回 false

getDescription():返回当前 Resource 代表的底层资源的描述符,通常就是资源的全路径(实际文件名或实际URL地址)。

isReadable():返回当前 Resource 代表的底层资源是否可读,true 表示可读

createRelative():用于创建相对于当前 Resource代表的底层资源的资源,比如当前 Resource 代表文件资源 d:/test/createRelative("test.txt") 将返回表文件资源 d:/test/test.txtResource 资源。

Spring 提供了如下内置实现

资源加载器 ResourceLoader

该接口用于获取资源,所有的 ApplicationContext 都实现了它

public interface ResourceLoader {

    Resource getResource(String location);

    ClassLoader getClassLoader();
}

资源匹配解析器 ResourcePatternResolver

public interface ResourcePatternResolver extends ResourceLoader {

    String CLASSPATH_ALL_URL_PREFIX = "classpath*:";

    Resource[] getResources(String locationPattern) throws IOException;
}

ResourceLoader

public interface ResourceLoaderAware {

    void setResourceLoader(ResourceLoader resourceLoader);
}

注入 Resources

@Component
public class MyBean {

    private final Resource template;

    public MyBean(@Value("${template.path}") Resource template) {
        this.template = template;
    }

}