classpath:的写法
classpath:app-Beans.xml
说明:无通配符,必须完全匹配
classpath:App?-Beans.xml
说明:匹配一个字符,例如 App1-Beans.xml 、 App2-Beans.xml
classpath:user/*/Base-Beans.xml
说明:匹配零个或多个字符串(只针对名称,不匹配目录分隔符等),例如:user/a/Base-Beans.xml 、 user/b/Base-Beans.xml ,但是不匹配 user/Base-Beans.xml
classpath:user/**/Base-Beans.xml
说明:匹配路径中的零个或多个目录,例如:user/a/ab/abc/Base-Beans.xml,同时也能匹配 user/Base-Beans.xml
classpath:**/*-Beans.xml
说明:表示在所有的类路径中查找和加载文件名以“-Beans.xml”结尾的配置文件,但重复的文件名只加载其中一个,视加载顺序决定
classpath*:user/**/*-Beans.xml
classpath*:**/*-Beans.xml
说明:“classpath*:”表示加载多个资源文件,即使重名也会被加载,比如app1.jar中有一个config-Beans.xml,app2.jar中也有一个config-Beans.xml,这个时候,两个都会加载。
classpath: 与 classpath*:区别
Spring可以通过指定classpath*:与classpath:前缀加路径的方式从classpath加载文件;如bean的定义文件classpath*:的出现是为了从多个jar文件中加载相同的文件;classpath:只能加载找到的第一个文件.
1. java web项目中的classpath
1.1 classpath的含义:
classpath是指 WEB-INF文件夹下的classes目录 ,对应为项目src目录文件编译之后的文件夹。是一个定位资源的入口。
1.2 classpath中文件优先访问级别
lib和classes下文件访问优先级的问题: lib>classes
1.3 classpath: 和 classpath*:区别
classpath:只会到你的class路径中查找找文件;
classpath的查找范围应该是/WEB-INF/classes,资源文件的缺省路径为src/main/resources,Maven在打包成war文件的时候,会将src/main/resources的资源文件复制到/WEB-INF/classes目录。
如果要加载的资源, 不在当前ClassLoader的路径里,那么用classpath:前缀是找不到的, 这种情况下就需要使用classpath*:前缀
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找,会从所有的calsspath中加载。当项目中有多个classpath路径,并同时加载多个classpath路径下的文件,就发挥了作用,如果不加,则表示仅仅加载第一个classpath路径。
在多个classpath中存在同名资源,都需要加载, 那么用classpath:只会加载第一个,这种情况下也需要用classpath*:前缀
注意:用classpath*:需要遍历所有的classpath,所以加载速度是很慢的,因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用 classpath*
**/:表示任意目录;
**/applicationContext-*.xml:表示任意目录下的以applicationContext-开头的XML文件。
2. maven项目中的classpath
2.1 maven项目中对应的classpath
maven项目分为src/main/java目录、src/main/resources目录,src/test/java目录,/peis-src/test/resources目录:
maven目录
编译文件目录
其中src/main/java目录、src/main/resources目录对应到项目的target\classes目录,如果在src/main目录调用classpath,则class的根目录为target\classes;
src/test/java目录,src/test/resources目录对应到test-classes目录,如果在src/test/java目录调用classpath,则class的根目录为target\test-classes;
扫描包时如果有多个包则用";"分开