Spring 中的 ResourceLoader实例详解

 更新时间:2024年11月05日 10:17:16   作者:杨过姑父  
Spring框架提供了ResourceLoader接口,用于加载资源文件,DefaultResourceLoader是其基本实现,只能加载单个资源,而ResourcePatternResolver继承自ResourceLoader,增加了按模式加载多个资源的能力,感兴趣的朋友一起看看吧

ResourceLoader 是用来将所需要的资源加载 并封装成 Resource对象

public void printStream(InputStream inputStream) throws IOException {
    Reader reader = new InputStreamReader(inputStream);
    BufferedReader bufferedReader = new BufferedReader(reader);
    String line = null;
    while ( (line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }
}

1.DefaultResourceLoader

DefaultResourceLoader是 ResourceLoader 一个默认的实现,只能加载单个的资源

@Test
public void getResource() throws IOException {
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Resource resource = resourceLoader.getResource("beans.xml");
    InputStream inputStream = resource.getInputStream();
    printStream(inputStream);
}
@Test
public void getResourceByPath() throws IOException {
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Resource resource = resourceLoader.getResource("/com/fll/TestCase.class");
    InputStream inputStream = resource.getInputStream();
    printStream(inputStream);
}

 2.ResourcePatternResolver

 ResourcePatternResolver也是继承了ResourceLoader,但是ResourcePatternResolver又定义了一个加载多个资源的方法,就是按照一个Pattern加载所有符合的资源

PathMatchingResourcePatternResolver一个按照ant风格的路径进行资源匹配加载的实现类

@Test
public void getResources() throws Exception {
    ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resourcePatternResolver.getResources("/**");
    Arrays.stream(resources).forEach(
            resource -> {
                if(resource.getFilename().equals("beans.xml")){
                    try {
                        InputStream inputStream = resource.getInputStream();
                        printStream(inputStream);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }else {
                    System.out.println(resource.getFilename());
                }
            }
    );
}

/** 代表加载classpath下的所有资源

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:beans="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
    <bean name="person" class="com.fll.start.Person">
        <property name = "name" value = "zhangsan"/>
        <property name = "age" value = "20"/>
    </bean>
</beans>
TestCase.class
AnnotationContainerStartProcess.class
Car.class
InputStreamPrinter.class
Person.class
XmlContainerStartProcess.class
DefaultResourceLoaderTest.class
InputResourceTest.class
ResourcePatternResolverTest.class
SpringStringUtilsTest.class
resource_loader
start
fll
com

可以看到确实匹配到了所有的资源,包括目录

到此这篇关于Spring 中的 ResourceLoader的文章就介绍到这了,更多相关Spring ResourceLoader内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis的selectKey作用详解

    mybatis的selectKey作用详解

    这篇文章主要介绍了mybatis的selectKey作用详解,具有很好的参考价值,希望对大家有所帮助。以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。</P><P>
    2022-01-01
  • Java实现前缀树详解

    Java实现前缀树详解

    Java实现前缀树(Trie树)是一种树形数据结构,用于字符串的存储和查找,适用于大量字符串的快速匹配。通过将字符串拆分为字符序列,依次构建树形结构,将每个字符串的字符依次存储在树的节点上,实现高效的字符串匹配
    2023-04-04
  • java 中类似js encodeURIComponent 函数的实现案例

    java 中类似js encodeURIComponent 函数的实现案例

    这篇文章主要介绍了java 中类似js encodeURIComponent 函数的实现案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 手把手教你搞懂冒泡排序和选择排序

    手把手教你搞懂冒泡排序和选择排序

    这篇文章主要介绍了java数组算法例题代码详解(冒泡排序,选择排序),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 使用Java将字符串在ISO-8859-1和UTF-8之间相互转换

    使用Java将字符串在ISO-8859-1和UTF-8之间相互转换

    大家都知道在一些情况下,我们需要特殊的编码格式,如:UTF-8,但是系统默认的编码为ISO-8859-1,遇到这个问题,该如何对字符串进行两个编码的转换呢,下面小编给大家分享下java中如何在ISO-8859-1和UTF-8之间相互转换,感兴趣的朋友一起看看吧
    2021-12-12
  • SpringBoot+thymeleaf+Echarts+Mysql 实现数据可视化读取的示例

    SpringBoot+thymeleaf+Echarts+Mysql 实现数据可视化读取的示例

    本文主要介绍了SpringBoot+thymeleaf+Echarts+Mysql 实现数据可视化读取的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Spring boot开发web应用JPA过程解析

    Spring boot开发web应用JPA过程解析

    这篇文章主要介绍了Spring boot开发web应用JPA过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot监控API请求耗时的6中解决解决方案

    SpringBoot监控API请求耗时的6中解决解决方案

    本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+Prometheus,具有一定的参考价值,感兴趣的可以了解一下
    2025-07-07
  • Java构造方法实例详解(动力节点java学院整理)

    Java构造方法实例详解(动力节点java学院整理)

    其实java构造方法很简单,下面通过示例给大家分享java构造方法,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-04-04
  • java8日期工具类封装的实战记录

    java8日期工具类封装的实战记录

    java time包中的是类是不可变且线程安全的,新的时间及日期API位于java.time中,下面这篇文章主要给大家介绍了关于java8日期工具类封装的相关资料,需要的朋友可以参考下
    2021-09-09

最新评论