有可以,通常是有區別的。
基本上你applicationContext.xml
是你的根上下文,是你的服務和數據層bean所在的地方。
*-servlet.xml
或webmvc-config.xml
是特殊的,因爲它們:
- 有一個
DispatcherServlet
相關
- 時總是
WebApplicationContext
bean工廠
- 是根上下文的孩子(也可以是
WebApplicationContext
)
但人們這樣做的最大原因是單元測試,解耦前端從後端,以及單獨的視圖解析器和/或多個調度器servlet。
這對單元測試很好,因爲您正在加載更少的bean來測試您的服務層。正如我在註釋中規定下面我通常加載我真正applicationContext.xml
像:
@ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext.xml")
而且因爲servlet上下文需要調度的servlet,你需要將其註冊爲喜歡的servlet:所以,當你
<servlet>
<servlet-name>my-web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
也許能夠使用根環境加載我們的MVC控制器bean,除非調度器servlet控制該環境,否則它們並未真正註冊。雖然理論上我認爲DispatcherServlet
可以加載類路徑中的配置,但注意contextConfigLocation值不在類路徑中。
還有些人需要多個調度程序servlet,因爲您通常只能擁有一個解析程序鏈(視圖,區域設置,主題等...)。
有趣的是,我認爲你需要用'@ ContextConfiguration'爲spring創建一個測試環境?我想我可以在我的測試環境中包含通常是'applicationContext.xml'的東西?我通常只將「 」放在我的上下文中,並與專用配置中的特定實現相關,這隻允許在測試環境中包含我需要的組件。所以你說這是歷史?這是否意味着我不再需要servlet上下文了?我是否還需要配置,但將其保留爲空?沒有這種背景有沒有好處? –
是的我實際上使用我真正的'applicationContext.xml'進行單元測試,並依靠我的'PropertyPlaceholderConfigurer'將基於環境的正確變量(即,dev vs staging vs production)放入正確的變量中。 –