当前位置: 首页 > news >正文

Spring Boot 中使用 ResourceLoader 加载资源的完整示例

ResourceLoader 是 Spring 框架中用于加载资源的接口。它定义了一系列用于获取资源的方法,可以处理各种资源,包括类路径资源、文件系统资源、URL 资源等。

以下是 ResourceLoader 接口的主要方法:

  1. Resource getResource(String location)

    • 根据给定的资源位置字符串返回一个 Resource 对象。
    • 位置字符串可以是类路径、文件系统路径、URL 等形式。
  2. ClassLoader getClassLoader()

    • 返回与此资源加载器关联的类加载器。
    • 可以用于加载类路径下的资源。
  3. Resource[] getResources(String locationPattern)

    • 根据模式字符串返回一个资源数组。
    • 模式字符串支持通配符,比如 classpath*:/**/*.xml
  4. Class<?> resolveClassName(String className)

    • 根据类名解析成 Class 对象。
    • 这样可以方便地获取到类信息。

在 Spring 框架中,ResourceLoader 的常用实现类是 DefaultResourceLoader,它提供了对资源加载的默认实现。在大多数情况下,不需要手动实现这个接口,而是使用 Spring 框架中提供的资源加载机制。

在 Spring Boot 中,ResourceLoader 的默认实现是 ResourceLoader 接口的实现类 DefaultResourceLoader。Spring Boot 还提供了更高级的资源加载方式,例如使用 @Value 注解加载配置文件中的属性,或者使用 @PropertySource 注解加载外部配置文件。

要使用 ResourceLoader,可以将其注入类中,例如在 Spring Boot 的组件中:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;@Component
public class MyResourceLoader {@Autowiredprivate ResourceLoader resourceLoader;public void loadResource(String location) {Resource resource = resourceLoader.getResource(location);// 处理资源,例如读取文件内容// ...}
}

在上面的例子中,ResourceLoader 被注入到 MyResourceLoader 中,可以使用它来加载资源。
下面来一个完整的例子:

1、创建一个demo.txt用来测试

resources/demo.txt

这是一个测试文本第一行
这是一个测试文本第二行
这是一个测试文本第三行

2、定义资源加载解析组件

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;import java.io.*;@Component
public class MyResourceLoader {@Autowiredprivate ResourceLoader resourceLoader;public String loadResource(String location) {// 获取资源Resource resource = resourceLoader.getResource(location);// 检查资源是否存在if (!resource.exists()) {System.out.println("该资源不存在!");return "该资源不存在!";}System.out.println("资源存在!");try (InputStream inputStream = resource.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));StringWriter writer = new StringWriter()) {String line;while ((line = reader.readLine()) != null) {writer.write(line);// 添加换行符 :每次读取一行后都会添加一个换行符,确保了每行的结尾都有换行符。// 如果仍然没有效果,请确认文件本身是否包含换行符。writer.write(System.lineSeparator());}return writer.toString();} catch (IOException e) {System.err.println("读取资源错误: " + e.getMessage());return "读取资源错误: " + e.getMessage();}}
}

3、service

import com.lfsun.demolfsunstudyresourceloader.config.MyResourceLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class ResourceService {@Autowiredprivate MyResourceLoader resourceLoader;public String getMyResource(String fileName) {System.out.println("寻找资源:" + String.format("classpath:%s",fileName));return resourceLoader.loadResource(String.format("classpath:%s",fileName));}}

4、controller

import com.lfsun.demolfsunstudyresourceloader.service.ResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/resource")
public class ResourceController {@Autowiredprivate ResourceService resourceService;// http://localhost:8080/resource/demo.txt@GetMapping("/{fileName}")public String getMyResource(@PathVariable String fileName) {return resourceService.getMyResource(fileName);}
}

5、访问 http://localhost:8080/resource/demo.txt 即可

Edge:加了换行还是没效果…Google也是
在这里插入图片描述
Apifox 正常:
在这里插入图片描述

http://www.lryc.cn/news/233891.html

相关文章:

  • 1688往微信小程序自营商城铺货商品采集API接口
  • QStatusBar开发详解
  • 后端接口性能优化分析-程序结构优化
  • 【SpringBoot3+Vue3】三【实战篇】-后端(优化)
  • DevExpress中文教程 - 如何在macOS和Linux (CTP)上创建、修改报表(上)
  • 一个iOS tableView 滚动标题联动效果的实现
  • 代码执行相关函数以及简单例题
  • 大数据爬虫分析基于Python+Django旅游大数据分析系统
  • C# 结构体介绍
  • 【机器学习】特征工程:特征预处理,归一化、标准化、处理缺失值
  • Pytorch torch.norm函数详解用法
  • 【DevOps】Git 图文详解(二):Git 安装及配置
  • 亚马逊美国站CPC认证ASTM F963测试项目要求有哪些?
  • 通付盾Web3专题 | KYT/AML:Web3合规展业的必要条件
  • Centos8配置Zabbix5.0中文汉化
  • 元数据管理,数字化时代企业的基础建设
  • 大数据之Hive:regexp_extract函数案例
  • tsconfig.json无法写入文件“XXXX“因为它会覆盖输入文件
  • 本周Github有趣项目:draw-a-ui等
  • VBA如何快速识别Excel单元格中的文本数字
  • Mysql数据库 16.SQL语言 数据库事务
  • docker 部署Redis集群(三主三从,以及扩容、缩容)
  • JavaScript 浮点数运算的精度问题及解决
  • 基于STM32的无线传感器网络(WSN)通信方案设计与实现
  • Flink和Kafka连接时的精确一次保证
  • UE4动作游戏实例RPG Action解析三:实现效果,三连击Combo,射线检测,显示血条,火球术
  • Linux/麒麟系统上部署Vue+SpringBoot前后端分离项目
  • STM32在FreeRTOS下的us延时
  • 软件测试/人工智能丨深入人工智能软件测试:PyTorch引领新时代
  • Android 当中的 Fragment 协作解耦方式