getResource和getResources的区别

getResource和getResources的区别getResource与getResources都是【加载当前类加载器以及父类加载器所在路径的资源文件】/***1.getResource*加载当前类加载器以及父类加载器所在路径的资源文件*将遇到的第一个资源文件直接返回!!!*比如当前工程类路径有conf/demo.properties文件,引入的第三方jar包也有这个文件*返回的是当前工程下的这个资源文件**/URLurl=loader.getResource(“conf/demo.properties”)

getResource与getResources 都是【加载当前类加载器以及父类加载器所在路径的资源文件】
/**
 * 1.getResource
 * 加载当前类加载器以及父类加载器所在路径的资源文件
 * 将遇到的第一个资源文件直接返回!!!
 * 比如当前工程类路径有conf/demo.properties文件,引入的第三方jar包也有这个文件
 * 返回的是当前工程下的这个资源文件
**/
  URL url = loader.getResource("conf/demo.properties");      
/**
  * 2.getResources 
  * 加载当前类加载器以及父类加载器所在路径的资源文件
  * 将遇到的所有资源文件全部返回!
  * 比如当前工程类路径有conf/demo.properties文件,引入的第三方jar包也有这个文件
  * 则将这些文件全部返回
*/
Enumeration<URL> enumeration = loader.getResources("conf/demo.properties");
// 打印出所有同名的资源文件
while (enumeration.hasMoreElements()) {
	URL url1 = enumeration.nextElement();
	System.out.println("file=" + url1.getFile());
}

来个例子

新建一个spring boot项目,在resources目录下创建一个META-INF/spring.factories

在这里插入图片描述

pom.xml中引入的包. 其中很多包中都会有META-INF/spring.factories目录文件,在Spring boot 启动时,会加载所有这些jar包中的META-INF/spring.factories,从而进行必要类的初始化工作
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>
测试类

下面展示一些 内联代码片


@SpringBootApplication
public class ResourceApplication implements CommandLineRunner {
    public static void main(String[] args) {
        SpringApplication.run(ResourceApplication.class, args);
    }
    @Override
    public void run(String... args) throws Exception {
        ClassLoader loader = ClassUtils.getDefaultClassLoader();
        URL url = loader.getResource("META-INF/spring.factories");
        System.out.println("Resource :" + url.getPath());
        System.out.println("=====================================");
        Enumeration<URL> enumeration = loader.getResources("META-INF/spring.factories");
        // 打印出所有同名的资源文件
        while (enumeration.hasMoreElements()) {
            URL url1 = enumeration.nextElement();
            System.out.println("Resources :" + url1.getFile());
        }
    }
}

在这里插入图片描述

由上面的输出可以看出,使用getResource时,只读取了当前模块resources下的MATE-INF/spring.factories文件。使用getResources,则读取到了所有依赖的包resources下的MATE-INF/spring.factories文件。

在这里插入图片描述

Spring Boot在启动时就使用到了这个,用来加载ApplicationContextInitializer实现类的初始化。

在这里插入图片描述

今天的文章getResource和getResources的区别分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/26022.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注