默认情况下,Spring将注册
BeanNameUrlHandlerMapping,和
DefaultAnnotationHandlerMapping,而无需任何显式配置。
如果你定义自己的
HandlerMappingbean,那么默认的bean将不会被注册,而你只会得到显式声明的bean。
到现在为止还挺好。
当你添加
<mvc:annotation-driven/>到混合中时,问题就来了。这也声明了自己的
DefaultAnnotationHandlerMapping,它取代了默认值。但是,如果你还声明自己的一个,那么最终你将得到两个。由于按声明顺序进行查询,因此通常意味着首先注册的
<mvc:annotation-driven/>人,而你自己的人将被忽略。
如果
DefaultAnnotationHandlerMappingregister by的
<mvc:annotation-driven/>行为类似于默认行为,那就更好了,即,如果显式声明的行为优先,但是那不是他们编写的方式。
我当前的偏好是根本不使用
<mvc:annotation-driven/>,这太混乱了,与其他配置选项混合使用时也太不可预测了。它实际上并没有做任何特别复杂的事情,显式添加它为你所做的工作并不困难或冗长,并且最终结果更易于理解。



