我是这样学习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"));
}
}
运行结果:
结论:
1. ClassLoader获取资源文件的方式:
getSystemResource()方法获取到的是Resources资源文件夹下的文件。在打包时,Resources资源文件夹下的文件,会复制到target/classes文件夹下。由此也可以猜测classpath的来源。
2. clazz获取资源的方式:
使用"/"作为前缀时,获取的文件目录跟ClassLoader获取到的路径一致。
但如果不使用"/"作为前缀,则获取到当前类所在包下的文件。
注意,默认情况下,Maven不会包中的文件打包出来,所以需要配置build节点。
总结
两种获取资源文件的方式不太一样,需要注意他们的不同点,在使用过程中,就不会迷糊了。
扫描关注,及时获取最新消息!
转载本站文章,请注明出处:呦呦工作室
以上是关于我是这样学习Spring源码的之如何获取资源文件的主要内容,如果未能解决你的问题,请参考以下文章