2011-09-16 24 views
36

XmlWebApplicationContext的Javadoc:Spring-MVC:什麼是「上下文」和「命名空間」?

默認情況下,配置將被從「/WEB-INF/applicationContext.xml的」採取根上下文,而「/WEB-INF/test-servlet.xml」爲一個名爲「test-servlet」的上下文(就像一個帶有servlet-name「test」的DispatcherServlet實例)。

這是什麼意思一個春天的上下文?

什麼是根環境?還有什麼其他類型的Spring環境?

什麼是命名空間?

UPDATE:

一些後續問題:

  1. 什麼是Spring的ApplicationContext - 是它的一些 「東西」 保存在一個XML配置文件中定義的豆?

  2. 看看ContextLoaderListener的代碼,它看起來像加載配置XML文件中定義的數據。但是我的Spring Web應用程序沒有定義這個監聽器或任何其他監聽器。怎麼會這樣?

  3. 在什麼情況下,有多個Spring的DispatcherServlet實例會有意義?

  4. 根上下文(來自applicationContext.xml的數據)是否適用於DispatcherServlet的每個實例,而其他上下文(例如來自test-servlet.xml的數據)僅適用於相關的DispatcherServlet(即測試)?

回答

22

「Spring context」= a Spring ApplicationContext

「根上下文」,就Web應用程序而言,是指Web應用程序加載和使用的主要上下文。通常,您將使用ContextLoaderListener開始根上下文。

根上下文不是真正的「種」上下文。這只是上下文所扮演的角色。你在webapp中有一個根上下文。其他上下文不是根上下文。他們通常是根環境的孩子。

這裏的命名空間是指Spring的DispatcherServlet實例的範圍。它所說的正確的是,如果你在你的web.xml中命名你的servlet「test」,那麼按照約定,Spring會查找一個名爲「test-servlet.xml」的文件作爲該調度器的上下文。順便說一下,爲調度程序創建的每個上下文都成爲根上下文的子節點。

編輯:要回答你的新問題:

  1. 按照我的回答,瞭解的ApplicationContext的第一行中的鏈接。如果你有問題沒有回答那裏,我會建議發佈一個新的SO問題。
  2. 根上下文是可選的。如果您沒有定義ContextLoaderListener,那麼您只是沒有根上下文。當您使用DispatcherServlet時,它會啓動它自己的ApplicationContext,並從那裏獲取它需要的bean。
  3. 我不知道我頭上有一個。我猜想如果您的應用程序中某些URL資源的配置需要完全不同的配置,可能會促使您這樣做。
  4. 是的。爲了用合適的術語說明,根上下文是爲DispatcherServlet啓動的任何上下文的父上下文。在父上下文中的bean可以通過子進程來訪問,但反過來卻是不正確的。
+0

@rapt:這不是真的適合大量的評論。你爲什麼不在上面的問題中添加這些問題或者開始一個新的問題? –

+0

謝謝,只是將我的問題添加到我原來的帖子。 – rapt

+0

已更新與答案 –

8

在一個web應用程序中,體系結構通常分爲多個層,如流行的MVC結構。 因此,一個Web應用程序基本上包含一個處理客戶端請求的層,即HTTPRequests 和一個爲這些請求提供服務的層。

總結:意味着處理Http請求的類,即映射到urls的控制器來自test-servlet.xml。這被稱爲WebapplicationContext,僅包含主要用於處理客戶端請求的bean。

現在接下來的部分是包含您的業務邏輯的Service/Dao層。執行此類邏輯的Bean將在ApplicationContext對象下加載。

現在你可能會問爲什麼他們將這些東西分成了文件或兩個不同的對象。

這是因爲,一個應用程序具有相同的業務邏輯,可以由多個客戶端使用不同的協議。您可以使用相同的服務層來處理RMI以及HTTP調用。 因此,Spring創建了一個以ApplicationContext開頭的父上下文。然後,如果您的應用程序處理Web請求,則可以創建一個具有自己的Webapplicationcontext並作爲父上下文的子項初始化的dispathcher servlet。 因此,所有的父母豆都可以在孩子中引用,可以是超越,但不是相反

+0

好的,有些與我的問題無關。但至於其餘的我不明白你想說什麼。 – rapt

+0

我試圖解釋爲什麼有兩種類型的上下文初始化。你正在調用root.xml和其他調用test-servlet.xml。恕我直言,我回答了1,2和4個問題。我的不好,如果我可以正確解釋:) – hellojava

+0

我認爲#2是一個很好的答案和相關 – user3799365

相關問題