Весенний MVC. Контекст приложения сервлета не может видеть компонент AutowiredAnnotationBeanPostProcessor в контексте корневого приложения

#spring #spring-mvc

Вопрос:

У меня есть два контекста приложения в моем приложении SpringMVC: appContext.xml (Контекст корневого приложения) и servletContext.xml (Контекст приложения Сервлета).

Фасоль в appContext.xml:

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

   <mvc:annotation-driven/>

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

Когда я запускаю свой сервер Tomcat с этими двумя контекстами, он завершается с ошибкой 500.

НО если я уйду <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> от appContext.xml чтобы servletContext.xml — сервер работает нормально.

Почему ServletApplicationContext не может видеть BeanPostProcessor, определенный в RootApplicationContext ?

P.S. Мой базовый контроллер содержит поля с аннотацией @Autowired.

Комментарии:

1. Как/где вы загружаете два контекста xml?

2. оба они настроены в web.xml, appContext.xml сначала загружается (с помощью ContextLoaderListener), затем servletContext.xml (с помощью DispatcherServlet) загружается

Ответ №1:

используйте @Resource вместо @Autowired

Комментарии:

1. Почему? Можете ли вы предложить объяснение?