當(dāng)用Spring的當(dāng)用ClassPathXmlApplicationContext獲取應(yīng)用上下文時(shí)。有兩種方法。
FileSystemXmlApplicationContext引用的是具體文件系統(tǒng)的文件路徑,而ClassPathXmlApplicationContext 在classpath找到xml文件 剛開始使用的是用Maven所構(gòu)建的web項(xiàng)目。當(dāng)前項(xiàng)目位于G:/newtool/workspace/springmvc中 knight.xml是放在src/main/java中。如果放到了src/main/java/di中,構(gòu)造參數(shù)應(yīng)該傳入"di/knight.xml" 不然是找不到文件的。 先看看maven創(chuàng)建的標(biāo)準(zhǔn)的目錄布局: Introduction to the Standard Directory Layout src/main/java/ 源文件 src/main/resources 資源文件 但是如果把knight.xml放到src/main/resources中時(shí),并不需要構(gòu)造參數(shù)應(yīng)該傳入"src/main/resourcesres/knight.xml" 而是直接傳入"knight.xml"。 這里就會意識到問題了,這樣看的話,我們要先找出classpath是哪里。
打印出來的包含G:/newtool/workspace/springmvc 還有就是bulid path還有classpath。 建議先看下兩個(gè)問題回答,我翻譯一些很好的解釋。 http:///questions/12893760/spring-cannot-find-bean-xml-configuration-file-when-it-does-exist http:///questions/3529459/what-is-the-difference-between-class-path-and-build-path 先說classpath,classpath會告訴java編譯器還有運(yùn)行時(shí)去找的編譯好的class。典型的是JAR文件名稱還有目錄的一個(gè)序列。 Build path并不是java的術(shù)語,它用來構(gòu)建應(yīng)用,包含編譯該應(yīng)用的所有源文件和java庫。 IDE通過這個(gè)配置classpath和sourcepath。 所以,我run的時(shí)候,發(fā)現(xiàn)xml放在src/main/resources也好,放在src/main/java也好。 其實(shí)現(xiàn)在我們用慣了IDE之后忽略了一個(gè)問題。就是運(yùn)行前還有進(jìn)行一些操作的時(shí)候, IDE都幫你重新構(gòu)建項(xiàng)目了,所以放到這兩個(gè)目錄里面。 將run的配置設(shè)置成運(yùn)行前不自動build。然后手動刪除 G:/newtool/workspace/springmvc目錄下的xml文件,便會出現(xiàn)找不到xml的錯誤了。 前面我們是用了Maven構(gòu)建,我們?nèi)绻肈ynamic Web Project的時(shí)候。 classpath是在G:\newtool\workspace\SpringMVCweb\build\classes類似這樣的目錄下面的。 所以具體的還是在Eclipse這邊控制。 至于后面使用:
為什么沒有改變到classpath,xml還是正常加載到。 如果build是編譯的話,和最原始的javac又有什么區(qū)別呢? 因?yàn)槭菑挠⒄Z的思維去思考的,還有這些糾結(jié)幾個(gè)英文單詞的話,中文很難找到答案。所以這次自己是自己在Stackoverflow提了自己第一個(gè)英文問題。雖然英文寫的蹩腳。 http:///questions/39585055/whats-the-differences-between-the-build-function-of-eclipse-and-javac 最后的到了答案,好感謝這位德國朋友。 更改的JVM的classpath并不是當(dāng)前運(yùn)行的,所以現(xiàn)在正在編譯運(yùn)行的還是原來的目錄。 所以xml還是正常找到。所以并影響到的是新的加載器,如果要想這樣,我們需要去用這個(gè)加載器去重新加載 整個(gè)spring的東西。確實(shí)這個(gè)真正相關(guān)的是Eclipse本身類加載器的一些配置上面了。追根到底的話。 不知道我為什么會問這種這么理論的問題,不過偶爾思考下問題也是好的。 |
|