Spring classpath前缀差异

Jav*_*cky 137 java spring classpath

记录在这里它说

此特殊前缀指定必须获取与给定名称匹配的所有类路径资源(内部,这通常通过ClassLoader.getResources(...)调用),然后合并以形成最终的应用程序上下文定义.

有人可以解释一下吗?

使用classpath*:conf/appContext.xml而不是classpath:conf/appContext.xml没有星号有什么区别.

Eug*_*kov 201

简单的定义

classpath*:conf/appContext.xml意味着,类路径中所有jar中文件conf夹下的所有appContext.xml文件都将被拾取并加入到一个大的应用程序上下文中.

相反,classpath:conf/appContext.xml只会加载一个这样的文件 ...第一个在类路径中找到.

  • 一个非常重要的事情 - 如果你使用*而Spring找不到匹配,它就不会抱怨.如果您不使用*并且没有匹配项,则上下文将无法启动(!) (27认同)
  • 他们之间还有一个有趣的区别.另见我的问题:http://stackoverflow.com/questions/16985770/runwith-and-contextconfiguration-weird-behaviour (6认同)

ska*_*man 38

classpath*:...当您希望使用通配符语法从多个bean定义文件构建应用程序上下文时,该语法非常有用.

例如,如果使用构造上下文classpath*:appContext.xml,则将针对类路径中调用的每个资源扫描appContext.xml类路径,并将所有资源中的bean定义合并到单个上下文中.

相反,classpath:conf/appContext.xml将获取appContext.xml从类路径调用的一个且仅一个文件.如果有多个,其他人将被忽略.

  • classpath *也会在子目录中查找吗?换句话说,如果我在类路径根目录中有appContext.xml,在/dir/appContext.xml中有一个,那么当我使用classpath *:appContext.xml时,是否会同时加载? (2认同)

Bac*_*ria 21

classpath*: 它引用资源列表加载类路径和列表中存在的所有此类文件可以为空,如果类路径中不存在此类文件,则应用程序不会抛出任何异常(只是忽略错误).

classpath:它引用某个资源仅加载在类路径中找到的第一个文件,如果类路径中没有这样的文件,它将引发异常

java.io.FileNotFoundException: class path resource [conf/appContext.xml] cannot be opened because it does not exist
Run Code Online (Sandbox Code Playgroud)