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

时间:2010-10-20 12:49:49

标签: spring spring-mvc spring-3

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

他们引入了<mvc:annotation-driven />做了一些黑魔法。这应该只在servlet配置文件中声明。

在Spring 2.5中,我刚刚在<context:annotation-config />和dispatcher servlet配置XML中使用<context:component-scan base='...'/>application-context.xml标记,并使用适当的基础包进行扫描。

所以我想知道servlet配置中mvc:annotation-drivencontext:annotation-config标签之间的区别是什么?我可以在Spring 3配置文件中消除什么?

3 个答案:

答案 0 :(得分:145)

<context:annotation-config>声明支持常规注释,例如@Required@Autowired@PostConstruct等。

<mvc:annotation-driven />声明明确支持注释驱动的MVC控制器(即@RequestMapping@Controller,虽然支持这些是默认行为),并且通过添加对声明性验证的支持@Valid和邮件正文编组@RequestBody / ResponseBody

答案 1 :(得分:36)

Spring docs中使用<mvc:annotation-driven />还有一些更详细的信息。简而言之,<mvc:annotation-driven />使您可以更好地控制Spring MVC的内部工作方式。除非您需要上述文档部分中列出的一项或多项功能,否则无需使用它。

此外,还有其他“注释驱动”标签可用于在其他Spring模块中提供其他功能。例如,<transaction:annotation-driven />允许使用@Transaction注释,@ {Sduduled等人需要<task:annotation-driven /> ...

答案 2 :(得分:7)

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

  1. 配置Spring 3类型ConversionService(替代PropertyEditors)
  2. 添加了对使用@NumberFormat
  3. 格式化数字字段的支持
  4. 如果Joda Time在类路径上,则添加对使用@DateTimeFormat格式化Date,Calendar和Joda Time字段的支持
  5. 如果JSR-303提供程序在类路径上,则添加对使用@Valid验证@Controller输入的支持
  6. 如果JAXB在类路径上(使用@RequestBody / @ ResponseBody进行HTTP消息转换),则支持读取和写入XML支持
  7. 如果杰克逊在类路径上(与#5一样),则添加对JSON读写的支持。
  8. <强>上下文:注解的配置 在定义的相同应用程序上下文中查找bean上的注释,并声明支持所有常规注释,如@ Autowired,@ Resource,@ Required,@ PostConstruct等。