2011-09-04 61 views
1

我必須在名爲myproj-controllers.xml,myproj-services.xml和myproj-dao.xml的myproj spring mvc應用程序中加載3個spring config xml文件。我有兩個選項來加載它們。加載spring config xmls的最佳方式是什麼?

首先使用上下文PARAM這樣

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-values>/WEB-INF/myproj-controllers.xml</param-values> 
    <param-values>/WEB-INF/myproj-services.xml</param-values> 
    <param-values>/WEB-INF/myproj-dao.xml</param-values> 
</context-param> 

和添加的ContextLoader聽衆

<listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
中的Myproj-servlet.xml中使用進口資源

<import resource="myproj-controllers.xml"/> 
<import resource="myproj-services.xml"/> 
<import resource="myproj-dao.xml"/> 

或其次在web.xml

推薦哪種方法?爲什麼?在我看來,我發現導入方法更簡單,因爲我們只需要更改myproj-servlet.xml而不是web.xml。

回答

1

Spring允許你在一個父子關係聲明多重背景,所以我總是去了一個根applicationContext.xml包含我的應用程序豆(服務的DAO等)和一個用於action-servlet.xml Servlet上下文中(請求映射,視圖解析器等)。

我曾經需要action-servlet-2.xml文件,但兩個servlet上下文仍然只有一個根applicationContext.xml

所以對我來說,它始終是父上下文+子上下文

將文件拆分成更多塊只是爲了減小XML的大小(這正是<import>的最佳做法)。

對我來說,contextConfigLocation參數是指應用程序上下文文件一起加載到一個應用程序上下文實例中。但是您的文件(myproj-controllers.xml,myproj-services.xmlmyproj-dao.xml)看起來像是部分的一個應用程序上下文文件

由於這個原因,我會親自去<import>語句,並在contextConfigLocation參數中只有一個值(對於根應用程序上下文)。

+0

嗨,我沒有意識到父上下文+子上下文,如果它在春天的文檔中提到我可能完全忽略它。你可以給我一個鏈接進一步閱讀?謝謝。 – tintin

+0

@ user354161:這是在Spring參考中提到的,但不幸的是它是分散的信息,而不是在一個地方強調。不過,javadoc的[ApplicationContext](http://static.springsource.org/spring/docs/2.5.5/api/org/springframework/context/ApplicationContext.html)提到了:_父類上下文的繼承。後代中的定義總是優先考慮。例如,這意味着整個Web應用程序可以使用單個父上下文,而每個Servlet都有自己的子上下文,而該子上下文獨立於任何其他Servlet。 – 2011-09-10 19:31:54

0

我更喜歡上下文加載器偵聽器的方法,但也許這是因爲我從來沒有考慮過導入方法。我會嘗試一下。謝謝。

我沒有看到任何性能優勢。兩種情況下都需要重新部署WAR文件。它正在修改一個文件而不是另一個文件。我沒有看到任何區別。它有一個自行車棚感覺給我,但我可能是錯的。

相關問題