首页 > 解决方案 > 春天MVC。Servlet 应用程序上下文在根应用程序上下文中看不到 AutowiredAnnotationBeanPostProcessor bean

问题描述

我的 SpringMVC 应用程序中有两个应用程序上下文:appContext.xml(根应用程序上下文)和 servletContext.xml(Servlet 应用程序上下文)。

appContext.xml 中的 Bean:

  <bean class="java.util.Random"/>
  <bean class="egor.spring.daos.impl.GamesDAOImpl"/>
  <bean class="egor.spring.services.impl.BaseServiceImpl"/>

  <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
  </bean>

servletContext.xml 中的 Bean:

  <mvc:annotation-driven/>

  <bean class="egor.spring.controllers.BaseController"/>

当我使用这两个上下文运行我的 Tomcat 服务器时,它会失败并出现 500 错误。

但是,如果我<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>从 appContext.xml 移动到 servletContext.xml - 服务器工作正常。

为什么 ServletApplicationContext 看不到 RootApplicationContext 中定义的 BeanPostProcessor ?

PS My BaseController 包含带有 @Autowired 注释的字段。

标签: springspring-mvc

解决方案


使用@Resource而不是@Autowired


推荐阅读