Это должно быть легко:
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="myInterceptor" />
</list>
</property>
</bean>
но этот путь перехватчик не называют.
По умолчанию Spring зарегистрирует BeanNameUrlHandlerMapping
и DefaultAnnotationHandlerMapping
без какой-либо явной конфигурации.
Если вы определите свои собственные bean-компоненты HandlerMapping
, то по умолчанию они не будут зарегистрированы, и вы получите только явно объявленные.
Пока все хорошо.
Проблема возникает, когда вы добавляете в микс
. Этот также объявляет свой собственный DefaultAnnotationHandlerMapping
, который заменяет значения по умолчанию. Однако, если вы также объявите свой собственный, то в итоге вы получите два. Поскольку к ним обращаются в порядке объявления, это обычно означает, что тот, который зарегистрирован
, вызывается первым, а ваш собственный игнорируется.
Было бы лучше, если бы DefaultAnnotationHandlerMapping
, зарегистрированный
, действовал как по умолчанию, то есть если явно объявленные объекты имели приоритет, но это не как они это написали.
В настоящее время я предпочитаю вообще не использовать
, это слишком запутанно и слишком непредсказуемо в сочетании с другими параметрами конфигурации. На самом деле он не делает ничего особенно сложного, нетрудно или многословно явно добавить то, что он делает за вас, и конечный результат легче отслеживать.
Причина такого поведения в том, что в контексте приложения существуют два боба типа org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
. Spring разрешает оба, но запрашивает перехватчики только у первого. Чтобы исправить это, нужно установить следующий параметр init в DispatcherServlet
<init-param>
<param-name>detectAllHandlerMappings</param-name>
<param-value>false</param-value>
</init-param>
Это заставит сервлет диспетчера использовать только handlerMapping
, определенный в x-servlet.xml
Непонятно, почему это поведение по умолчанию. Я жду ответа от сообщества spring.