У меня есть пружинный компонент, который использовался в качестве конечной точки гибкого света (с использованием @RemotingDestination
), и теперь мне нужно его повторно использовать как конечную точку REST.Почему мой весенний компонент не доступен для WebApplicationContext?
Что я сделал, так это создание дополнительного сервлета для отдыха (типа DispatcherServlet
of courser) в дополнение к существующему сервлету blaze-ds, который у меня был.
Я тогда хотел получить доступ те же компоненты, с помощью REST (отсюда мой предыдущий question), и я обнаружил, что я получаю 404.
Мой конфигурационный файл покоя servlet.xml смотрел что-то вроде:
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>
И мой ContextLoaderListener
использует все мои контекстные файлы весны, в которые входит компонентное сканирование этих компонентов.
Поскольку гибкий сервлет не имел проблем с доступом к этим компонентам @Component, которые были отсканированы глобальным контекстом, я предположил, что у остального-сервлета также будет доступ к ним, и мне просто нужно добавить аннотации к компонентам.
Странная часть заключалась в том, что, когда я явно добавил компонентное сканирование для пакета, в котором находятся эти компоненты, тогда работал оставшийся вызов.
Это означало, что эти компоненты были созданы дважды, один раз для глобального контекста (поскольку он сканирует файл конфигурации, содержащий это сканирование для сервлета flex), и один для контекста rest-servlet (я проверил это с помощью простого статический счетчик и блокировка класса).
Мой вопрос: почему не может сервлет сервата увидеть бобов, которые может использовать flex-сервлет?
спасибо за объяснение. Можете ли вы сослаться на ресурс, определяющий это весеннее решение («эти бобы не будут обсуждаться при сопоставлении HTTP-вызовов с контроллерами»)? – Ittai
@Ittai: Нет, не совсем. Это как раз то, как это работает, я не думаю, что в документации указано это явно. – skaffman
Хорошо, спасибо большое. – Ittai