我是这样学习Spring源码的之如何获取资源文件

Posted YouYou工作室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是这样学习Spring源码的之如何获取资源文件相关的知识,希望对你有一定的参考价值。

前言

对于资源文件,之前一直想去弄明白但一直没有仔细去研究。最近正好在看Spring源码,正好涉及到这方面的问题。
当我们要创建bean的时候,可以通过xml配置文件来获取bean。其实这个xml文件,其实就是一个资源文件。

BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"));
MyTestBean myTestBean = (MyTestBean) bf.getBean("myTestBean");

当然Spring配置bean相关的方式有好多种,它也有好多实现Resource接口的子类。今天要跟大家讨论的,就是资源文件获取的问题。

Maven中如何将包中的文件作为资源文件

在讨论具体问题的时候,为了演示方便,先配置一下pom文件,让包文件夹下的普通文件能够生成到相应的包文件夹下面,实现方法:在pox.xml文件中,增加build节点,代码如下:

<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>

先看测试代码

文件结构如下:

测试代码如下:

package com.youyoustudio.codedemo;

public class Demo {
public static void main(String[] args) {
System.out.println(Demo.class.getResource(""));
System.out.println(Demo.class.getResource("/"));
System.out.println(Demo.class.getResource("hello.txt"));
System.out.println(ClassLoader.getSystemResource(""));
System.out.println(ClassLoader.getSystemResource("test.xml"));
}
}

运行结果:

我是这样学习Spring源码的之如何获取资源文件结论:
1. ClassLoader获取资源文件的方式:
getSystemResource()方法获取到的是Resources资源文件夹下的文件。在打包时,Resources资源文件夹下的文件,会复制到target/classes文件夹下。由此也可以猜测classpath的来源。
2. clazz获取资源的方式:
使用"/"作为前缀时,获取的文件目录跟ClassLoader获取到的路径一致。
但如果不使用"/"作为前缀,则获取到当前类所在包下的文件。
注意,默认情况下,Maven不会包中的文件打包出来,所以需要配置build节点。

总结

两种获取资源文件的方式不太一样,需要注意他们的不同点,在使用过程中,就不会迷糊了。

 

扫描关注,及时获取最新消息!

转载本站文章,请注明出处:呦呦工作室


以上是关于我是这样学习Spring源码的之如何获取资源文件的主要内容,如果未能解决你的问题,请参考以下文章

那些年你不能错过的之Spring事务

Spring源码学习-容器BeanFactory BeanDefinition的创建-解析资源文件

不一样的视角来学习Spring源码之容器与Bean---上

spring源码分析:resource资源定位一

Spring-webRestTemplate源码学习

曹工说Spring Boot源码-- 怎么从properties文件读取bean