classpath & classpath*

来源:互联网 发布:美国原油库存eia数据 编辑:程序博客网 时间:2024/06/15 18:13
  • applicationContext.xml
    这个文件在项目是非构建工具构建时,一般是放在 /WEB-INF/ 下面,所以在web.xml 里面配置是这样的。
    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>applicationContext.xml</param-value>    </context-param>

如果你有多个文件,可以这样做:

    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>            applicationContext.xml            applicationContext2.xml            applicationContext3.xml        </param-value>    </context-param>

但是一般建议是:只把applicationContext.xml 放在这里,其他的放入applicationContext.xml 里面:

    <import resource="applicationContext2.xml" />    <import resource="applicationContext3.xml" />

note: 这里是相对路径

随着项目的不断增长,会出现 前端和后端分离的情况 ,后端dao和service 是通过jar包来引入,那么原来引入xml文件的方式 也要发生变化:

    <import resource="classpath:applicationContext2.xml" />    <import resource="classpath:applicationContext3.xml" />

这个方式是使用classLoader(WebAppClassLoader) 来加载
在 ClasspathResource 里面 可以见到:

    @Override    public InputStream getInputStream() throws IOException {        InputStream is;        if (this.clazz != null) {            is = this.clazz.getResourceAsStream(this.path);        }        else if (this.classLoader != null) {            is = this.classLoader.getResourceAsStream(this.path);        }        else {            is = ClassLoader.getSystemResourceAsStream(this.path);        }        if (is == null) {            throw new FileNotFoundException(getDescription() + " cannot be opened because it does not exist");        }        return is;    }

note: 这种方式只会去获取最先匹配路径的classpath ,然后就
还用一种是引入方式是:

    <import resource="classpath*:applicationContext2.xml" />

note: 这个会去匹配所有符合 applicationContext2.xml 路径的classpath , 就可以获取多个 ,如果多个xml 里面有多个name相同的 bean, 后依赖的jar包里面的bean Value 会覆盖掉前面的。
这样就可以将controller层 需要从jar包 引入的配置文件 统一配成(/AAAA/bbb.xml) 这样就可以在controller 层里面写成这样。(但在公司实际项目中 我们会根据项目名而命令不同的配置文件,比如dao层, xxxx-dao.xml ,所以目前只是了解。)

    <import resource="classpath*:AAAA/bbb.xml" />

关于这个Resource 的文档解释 看 官方文档

另参考 此文章

0 0