java - SpringMVC : <context:component-scan/> and <mvc:annotation-driven> must in the same context?

标签 java spring spring-mvc servlets

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 OR 中放置 <context:component-scan base-package="com.github" />在 dispatcher-servlet.xml 和 <mvc:annotation-driven /> 中在 applicationConext.xml 中。

它不起作用!!!返回httpStatus 404,not found,表示没有映射到Controller。

ApplicationContext 是 WebApplicationContext 的父级,子级 context 应该继承父级 conext,所以我认为设置可以在不同的上下文中分开,但不能在同一个上下文中分开!

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

最佳答案

在 Spring 中,您拥有根应用程序上下文,它是一个 WebApplicationContext和至少一个 child WebApplicationContext , 虽然你可以有多个 DispatcherServlet s 具有相应的 WebApplicationContexts。这些是不同的上下文,尽管 DispatcherServlet 的 WebApplicationContext是根应用程序上下文的子项。这意味着子上下文可以访问根应用程序上下文的所有 beans,但它们仍然是两个不同的上下文。

现在每个上下文都是使用相应的配置文件单独构建的。因此,如果您仅指定 <context:component-scan />在一个包装中 <mvc-annoation-driven />在另一个中,然后在构建一个上下文时它将进行组件扫描,但它不会注册任何与 Controller 相关的注释,因为您没有使用 <mvc-annoation-driven /> 启用它们。在同一个配置文件中。现在在另一个上下文中,启用了与 Controller 相关的注释,但从未扫描过任何组件。这就是找不到映射的原因。

这也是为什么将由多个 DispatcherServlet 使用的通用配置在根应用程序上下文中配置,而 Controller 相关配置在相应的 Web 应用程序上下文中配置。

关于java - SpringMVC : <context:component-scan/> and <mvc:annotation-driven> must in the same context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40437351/

相关文章:

java - 如何显示一条消息,告诉用户他们的猜测与随机生成的数字相差多远?

spring - 如何使用 JDK8 功能重写 jdbcTemplate 查询?

spring - 如何使用spring mvc 3获取JSP文件中的属性

java - 在 SQL DB 中插入空 java.sql.Date 的更优雅的方法

java.awt.Shape 正在捉弄我

java - 在测试中使用 Spring 上下文启动 Jetty

java - 如何使用 ITextRenderer 在每个页面上添加页眉和页脚

Spring MVC : How to return an image from controller?

java - 如何将 @RequestBody 映射到实现 Builder 模式的 Java 对象

java - JSP 和服务器端延迟