Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring禁用上下文:组件扫描未检测到控制器_Java_Spring_Spring Mvc_Spring Security - Fatal编程技术网

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

Java Spring禁用上下文:组件扫描未检测到控制器,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我的应用程序在以下情况下正确运行: 当我将其替换为手动bean定义时,不再检测控制器 在任何情况下,我都会使用这些注释: 控制器的自动连线方法被调用,但bean没有声明为入口点,因此,404错误且不可访问 元件扫描背后的黑魔法是什么 控制器声明如下: 根据您的评论进行推测-您已经在applicationContext-controllers.xml文件中声明了控制器的bean,现在该文件是否导入到web应用程序上下文文件中,即您在DispatcherServlet web.xml文件中声

我的应用程序在以下情况下正确运行:


当我将其替换为手动bean定义时,不再检测控制器

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


控制器的自动连线方法被调用,但bean没有声明为入口点,因此,404错误且不可访问

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

控制器声明如下:


根据您的评论进行推测-您已经在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> 

调度员
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/applicationContext-controller.xml
1.

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

根据您的评论进行推测-您已经在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> 

调度员
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/applicationContext-controller.xml
1.

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

如何用手动bean定义替换它?你定义控制器吗?我只定义bean。应该没问题,不是吗?你明白控制器也是bean吗?我要说的是,我没有显式地声明de控制器。我刚刚创建了一个applicationContext-controller.xml,并将de控制器作为bean包含在内。然后,我希望spring通过检测注释@RequestMapping看到这些是控制器。这是否像事务一样,它们需要在同一个文件中?尝试将注释驱动添加到定义了控制器的文件中,看看这是否有帮助。如何用手动bean定义替换它?你定义控制器吗?我只定义bean。应该没问题,不是吗?你明白控制器也是bean吗?我要说的是,我没有显式地声明de控制器。我刚刚创建了一个applicationContext-controller.xml,并将de控制器作为bean包含在内。然后,我希望spring通过检测注释@RequestMapping看到这些是控制器。这是否像事务一样,它们需要在同一个文件中?尝试将注释驱动添加到已定义控制器的文件中,看看是否有帮助。这就是解决方案。我以为一切都在同一个背景下。谢谢,这就是解决办法。我以为一切都在同一个背景下。谢谢