0

我的应用程序正在正确运行:

<context:component-scan base-package="com.mypackage">  </context:component-scan>

当我用手动 bean 定义替换它时,不再检测到控制器。

在任何情况下,我都使用这些注释:

<context:annotation-config />
<mvc:annotation-driven />

调用了控制器的自动装配方法,但未将 bean 声明为入口点,因此出现 404 错误且不可访问。

组件扫描背后的黑魔法是什么?

控制器是这样声明的:

<?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Controller configuration -->
    <bean class="com.xx.ControllerClass" />

</beans>
4

1 回答 1

3

基于您的评论的推测 - 您已经在 applicationContext-controllers.xml 文件中为您的控制器声明了 bean,现在这个文件是在 Web 应用程序上下文文件中导入的,您使用 DispatcherServlet web.xml 文件声明的那个文件:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/applicationContext-controller.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet> 

如果不是,那么这可能就是问题所在。基于 Spring MVC 的应用程序通常有两种不同的应用程序上下文,一种是您使用 ContextLoaderListener(根 Web 应用程序上下文)声明的,另一种是通过 DispatcherServlet 声明的 Web 相关 bean,您的控制器mvc:annotation-driven等需要在 Web 相关 bean 声明中.

于 2012-07-10T20:27:36.070 回答