- org.springframework.core.io.supportClassPathMatchingResourcePatternResolver
- org.springframework.utilClass AntPathMatcher
所有的配置官方說明請參照這兩個類
在web.xml配置spring的配置文件
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>這里寫路勁</param-value>
- </context-param>
首先上幾種寫法(這個是spring的api復制的)
- 1. /WEB-INF/*-context.xml
- 2. com/mycompany/**/applicationContext.xml
- 3. file:C:/some/path/*-context.xml
- 4. classpath:com/mycompany/**/applicationContext.xml
這些路徑看起來很亂有木有
這里要說明一點,不要以為路徑中的匹配符號是正則表達式(開始我是這樣想的),這些符號的完整定義
----------------------------------------------------------------------
? 匹配一個任意字符 aa? 可以匹配 aa1 aab 但是不能匹配aa
* 匹配零個或者多個字符 aa* 可以匹配 aa1 aab aa aaa
** 兩個**不要以為是上面那個* 寫兩個的意思。 它的意思是匹配任意個路徑 aa/**/bb 可以匹配aa/b/c/bb aa/bb
aa 和bb之間可以個任意目錄
----------------------------------------------------------------------
1.會查找到WEB-INF目錄下的以"-context.xml"結尾的文件 在WEB-INF下的 a-context.xml b-context.xml都會被找到
2.com/mycompany/目錄下所有的applicationContext.xml都會被找到
3.file 表示會根據文件系統的路徑查找 這個條會找到 c盤下的/some/path目錄以"-context.xml"的文件都會被找到
4.查找classpath下的com/mycompany/包中所有子包的applicationContext.xml文件
這個東西卻是搞的有點復雜了。
完了嗎 ? 還沒有 還有classpath與 classpath* [注意*號]
示例1: classpath*:config/applicationContext.xml //: 查找本項目的classpath以及Jar包的classpath目錄下的匹配的文件.
示例2: classpath:config/applicationContext.xml //查找本項目的classpath 目錄下的匹配的文件.
區別是神馬?classpath還有classpathaa或者classpathbb 不會呀,java只有classpath,那,那個*是神馬意思。。。。
我告訴你:
classpath*中的*並非 匹配零或者多個字符的那個* (太亂了有木有)
classpath*是一種特殊的表示方法 ,它告訴spring找配置文件的時候WEB-INF/LIB中的jar文件也要找
classpath*:applicationContext.xml會找到所有jar文件根目錄的applicationContext.xml文件,當然也包括classpath中的applicationContext.xml
這里有一點要注意 classpath*如果要在jar文件的根目錄查找 就不能使用上面的那種模糊匹配,比如
classpath*:app*.xml 這樣只能找到classpath下的app開頭*.xml結尾的配置文件, 效果和classpath:app*.xml一樣,jar中的會被忽略
如果想查找jar中的配置文件就把配置文件放在jar文件的根目錄下級下的目錄(包括下級) 例如
jar文件中springConfig/applicationContext.xml, springConfig/applicationAA.xml
可以使用 classpath*:springConfig/app*.xml找到這兩個配置文件.
總之要找到jar文件中的配置文件,還要使用模糊匹配,配置文件就應該在jar文件根目錄除外的其他任何地方,然后根據路徑名稱模糊匹配即可找到