servlet中的<mvc:annotation-driven />和<context:annotation-config />有什么区别?

我正在从Spring 2.5迁移到Spring 3。

他们引入了<mvc:annotation-driven /> ,它有一些黑魔法。 这应该只在servletconfiguration文件中声明。

在Spring 2.5中,我刚刚使用<context:annotation-config /><context:component-scan base='...'/>标签在application-context.xml和dispatcher servletconfigurationXML中声明了适当的基本包扫描。

所以我想知道servletconfiguration中的mvc:annotation-drivencontext:annotation-config标记和Spring 3configuration文件中可以省略的是什么?

<context:annotation-config>声明对一般注释的支持,例如@Required ,@ @Autowired ,@ @PostConstruct等等。

<mvc:annotation-driven />声明了对注解驱动的MVC控制器的明确支持(即@Controller @RequestMapping@Controller Controller,尽pipe对这些是默认行为的支持),并且通过@Valid和消息正文编组添加了对声明性validation的支持与@RequestBody / ResponseBody

在Spring文档中还有一些关于<mvc:annotation-driven />的使用细节。 简而言之, <mvc:annotation-driven />可以更好地控制Spring MVC的内部工作。 除非您需要上述文档中所述的一个或多个function,否则不需要使用它。

此外,还有其他“注释驱动”标签可用于在其他Spring模块中提供附加function。 例如, <transaction:annotation-driven />可以使用@Transaction注解, <task:annotation-driven /> Scheduled等需要<task:annotation-driven />

mvc:annotation-driven是在Spring 3.0中添加的一个标记,它执行以下操作:

  1. configurationSpring 3typesConversionService(PropertyEditors的替代)
  2. 添加对使用@NumberFormat格式化数字字段的支持
  3. 如果Joda时间位于类path中,则添加对使用@DateTimeFormat格式化date,日历和Joda时间字段的支持
  4. 如果JSR-303提供程序位于类path中,则添加对使用@Validvalidation@Controllerinput的支持
  5. 如果JAXB位于类path中,则添加对读取和写入XML的支持(使用@ RequestBody / @ ResponseBody转换HTTP消息)
  6. 如果Jackson在类path上(如#5所示),则增加对读写JSON的支持

context:annotation-config在定义的同一应用程序上下文中查找bean的注释,并声明支持所有常规注释(如@Autowired,@Resource,@Required,@PostConstruct等)。