ApplicationContext是WebApplicationContext的父级。
但是,为什么并且必须在相同的环境下使用它才能起作用?
这是我的解释:
=============
我这样配置我的applicationConext.xml:
<context:component-scan base-package="com.github" /> <mvc:annotation-driven />
在dispatcher-servlet.xml中没有类似的设置。
有用!!!
===========
我这样配置我的dispatcher-servlet.xml:
在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中放进去。
<context:component-scan base-package="com.github" />
<mvc:annotation-driven />
这没用!!! 返回httpStatus 404(未找到),这意味着它没有映射到Controller。
ApplicationContext是WebApplicationContext的父级,子级上下文应从父级conext继承,因此我认为这些设置可以在不同的上下文中分开,但不能相同!
我错了吗 ?请任何人都可以回答我,谢谢!
在Spring中,您具有一个根应用程序上下文,该上下文是WebApplicationContextand至少一个子级WebApplicationContext,尽管您可以将多个DispatcherServlets与相应的WebApplicationContexts一起使用。这些是不同的上下文,尽管DispatcherServlet WebApplicationContext是根应用程序上下文的子级。这意味着子上下文可以访问根应用程序上下文的所有bean,但是它们仍然是两个不同的上下文。
WebApplicationContext
DispatcherServlet
现在,使用相应的配置文件分别构造每个上下文。因此,如果仅<context:component-scan />在一个程序包中指定另一个程序包<mvc- annoation-driven />中的内容,则在构造一个上下文时,它将进行组件扫描,但由于未<mvc-annoation-driven />在同一配置文件中启用它们,因此它不会注册任何与控制器相关的注释。现在,在其他上下文中,启用了与控制器相关的注释,但从未扫描任何组件。这就是为什么找不到映射的原因。
<context:component-scan />
<mvc- annoation-driven />
<mvc-annoation-driven />
这也是为什么在根应用程序上下文中配置多个DispatcherServlet将使用的通用配置,而在相应的Web应用程序上下文中配置与控制器相关的配置的原因。