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看到这些是控制器。这是否像事务一样,它们需要在同一个文件中?尝试将注释驱动添加到已定义控制器的文件中,看看是否有帮助。这就是解决方案。我以为一切都在同一个背景下。谢谢,这就是解决办法。我以为一切都在同一个背景下。谢谢