我是这样学习Spring源码的之如何获取资源文件
  • 分类:Java技术
  • 发表:2019-03-27
  • 围观(656)

前言

对于资源文件,之前一直想去弄明白但一直没有仔细去研究。最近正好在看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节点。

总结

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


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

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

Top