По умолчанию Spring регистрирует BeanNameUrlHandlerMapping
и DefaultAnnotationHandlerMapping
, без каких-либо явных настроек.
Если вы определите свои собственные HandlerMapping
бины, то по умолчанию они не будут зарегистрированы, и вы просто получите явно объявленные.
Пока все хорошо.
Проблема возникает, когда вы добавляете <mvc:annotation-driven/>
к миксу.Этот также объявляет свой собственный DefaultAnnotationHandlerMapping
, который заменяет значения по умолчанию.Однако, если вы также объявите свой собственный, то в итоге вы получите два.Поскольку к ним обращаются в порядке объявления, это обычно означает, что тот, который зарегистрирован <mvc:annotation-driven/>
, вызывается первым, а ваш собственный игнорируется.
Было бы лучше, если бы DefaultAnnotationHandlerMapping
, зарегистрированный <mvc:annotation-driven/>
действовал так же, как и по умолчанию, т. е. если явно объявленные имели приоритет, но это не так, как они написали.
В настоящее время я предпочитаю вообще не использовать <mvc:annotation-driven/>
, это слишком запутанно и слишком непредсказуемо, когдасмешивается с другими параметрами конфигурации.На самом деле он не делает ничего особенно сложного, нетрудно или многословно явно добавить то, что он делает для вас, и конечный результат легче понять.