2012-05-02 56 views
8

我知道:類路徑,文件系統有什麼區別?

  1. ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

    負荷從位於classpath中的XML文件,處理上下文定義爲類路徑資源上下文定義。從文件系統中的一個XML文件

  2. ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");

    負荷上下文定義。從包含在Web應用程序中的XML文件

  3. XmlWebApplicationContext

    負荷上下文定義。

但是,究竟是什麼意思?

謝謝:)

+4

您已經描述了他們如何在使用不同。在內部它們具有不同的行爲,例如XmlWebApplicationContent,默認情況下會在WEB-INF文件夾中查找applicationContext.xml。並且它還需要init參數來配置不同的位置。基本上他們將使用不同的方法來加載XML文件。 – Seshagiri

回答

16
  • ClassPathXmlApplicationContext將讀取你的classpath的文件。它們必須位於您的Web應用程序的classes文件夾中,或位於lib文件夾中的jar中。

  • FileSystemXmlApplicationContext可以訪問您的所有文件系統,例如c:/config/applicationContext.xml

  • XmlWebApplicationContext當然可以訪問Web應用程序中包含的文件,但這不是最重要的。它實現了WebApplicationContext,這意味着它將檢測到ServletContextAware bean,註冊自定義作用域(request,session,...)等等。

+0

這就是我想要的。謝謝 :) –

0

我認爲上述觀點可能有一些錯誤,FileSystemXmlApplicationContext無法訪問您的整個文件系統,它只能掃描是整個項目folder.In爲了證明我的結論我做一個例子,第一使用ClasspathXmlApplicationContext和一切正常,第二次我將beans.xml文件移動到我的桌面文件夾,所以項目hirachy中沒有beans.xml文件,並將ClassPathXmlApplicationContext更改爲FileSytemXmlApplicationContext並出現問題,錯誤跟蹤如下:

INFO: Loading XML bean definitions from file [/Users/crabime/Development/IdeaProjects/springInterview/Users/crabime/Desktop/beans.xml] 
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [/Users/crabime/Development/IdeaProjects/springInterview/Users/crabime/Desktop/beans.xml]; nested exception is java.io.FileNotFoundException: Users/crabime/Desktop/beans.xml (No such file or directory) 

因此F ileSystemXmlApplicationContext只能檢測當前項目的所有文件夾。比如你做一個該項目的根目錄下創建名爲config目錄,你可以改變你的主類代碼象下面這樣:

ApplicationContext atx = new FileSystemXmlApplicationContext("/config/beans.xml"); 

,一切都會好的一次。所以如果所有人都喜歡sinuhepop說我認爲應該有些事情需要改變。

0

FileSystemXmlApplicationContext-您需要提供的XML bean 的ClassPathXmlApplicationContext完整的完整路徑 - 在這種情況下,你DONOT需要設置全路徑,只要classpath中設置

相關問題