#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. Почему? Можете ли вы предложить объяснение?