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