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
标签:
Spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗