可以而且通常是有区别的。
基本上,您applicationContext.xml
是您的根上下文,并且是您的服务和数据层 bean 所在的位置。
*-servlet.xml
或webmvc-config.xml
特别之处在于:
- 有
DispatcherServlet
关联
- 总是
WebApplicationContext
豆厂
- 是根上下文的子项(也可以是 a
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,因为您通常只能拥有一个解析器链(视图、区域设置、主题等)。