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

posted @   Mars.wang  阅读(94)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示