Spring禁用上下文:组件扫描不检测控制器

时间:2012-07-10 17:16:16

标签: java spring spring-mvc spring-security

我的应用程序正确运行:

<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>

1 个答案:

答案 0 :(得分: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等需要在与网络相关的bean声明。