小编典典

SpringMVC: 和 必须在相同的背景下?

spring-mvc

ApplicationContext是WebApplicationContext的父级。

但是,为什么并且必须在相同的环境下使用它才能起作用?

这是我的解释:

=============

我这样配置我的applicationConext.xml:

<context:component-scan base-package="com.github" />
<mvc:annotation-driven />

在dispatcher-servlet.xml中没有类似的设置。

有用!!!

===========

我这样配置我的dispatcher-servlet.xml:

<context:component-scan base-package="com.github" />
<mvc:annotation-driven />

在applicationConext.xml中没有类似的设置。

也可以!!!

==========

但是,如果我<context:component-scan base-package="com.github" />在applicationConext.xml和<mvc:annotation-driven />dispatcher-servlet.xml中
放进去, 或者<context:component-scan base-package="com.github" />在dispatcher-
servlet.xml和<mvc:annotation-driven />applicationConext.xml中放进去。

这没用!!! 返回httpStatus 404(未找到),这意味着它没有映射到Controller。

ApplicationContext是WebApplicationContext的父级,子级上下文应从父级conext继承,因此我认为这些设置可以在不同的上下文中分开,但不能相同!

我错了吗 ?请任何人都可以回答我,谢谢!


阅读 261

收藏
2020-06-01

共1个答案

小编典典

在Spring中,您具有一个根应用程序上下文,该上下文是WebApplicationContextand至少一个子级WebApplicationContext,尽管您可以将多个DispatcherServlets与相应的WebApplicationContexts一起使用。这些是不同的上下文,尽管DispatcherServlet
WebApplicationContext是根应用程序上下文的子级。这意味着子上下文可以访问根应用程序上下文的所有bean,但是它们仍然是两个不同的上下文。

现在,使用相应的配置文件分别构造每个上下文。因此,如果仅<context:component-scan />在一个程序包中指定另一个程序包<mvc- annoation-driven />中的内容,则在构造一个上下文时,它将进行组件扫描,但由于未<mvc-annoation-driven />在同一配置文件中启用它们,因此它不会注册任何与控制器相关的注释。现在,在其他上下文中,启用了与控制器相关的注释,但从未扫描任何组件。这就是为什么找不到映射的原因。

这也是为什么在根应用程序上下文中配置多个DispatcherServlet将使用的通用配置,而在相应的Web应用程序上下文中配置与控制器相关的配置的原因。

2020-06-01