157

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

他们已经介绍了<mvc:annotation-driven />哪些会做一些黑魔法。这应该只在 servlet 配置文件中声明。

在 Spring 2.5 中,我刚刚使用了在<context:annotation-config />和调度程序 servlet 配置 XML<context:component-scan base='...'/>中声明的标签,application-context.xml并带有适当的基本包进行扫描。

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

4

3 回答 3

152

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

<mvc:annotation-driven />声明对注释驱动的 MVC 控制器的显式支持(即@RequestMapping,尽管对这些控制器的支持是默认行为),并通过/@Controller来添加对声明性验证@Valid和消息体编组的支持。@RequestBodyResponseBody

于 2010-10-20T13:23:28.000 回答
36

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

此外,还有其他“注释驱动”标签可用于在其他 Spring 模块中提供附加功能。例如,<transaction:annotation-driven />启用@Transaction 注释的使用,<task:annotation-driven />对于@Scheduled 等是必需的...

于 2012-12-03T18:06:18.597 回答
7

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

  1. 配置 Spring 3 Type ConversionService(替代 PropertyEditors)
  2. 添加对使用 @NumberFormat 格式化数字字段的支持
  3. 如果 Joda Time 在类路径上,则添加对使用 @DateTimeFormat 格式化日期、日历和 Joda Time 字段的支持
  4. 如果 JSR-303 Provider 在类路径上,则添加对使用 @Valid 验证 @Controller 输入的支持
  5. 如果 JAXB 在类路径上,则添加对读取和写入 XML 的支持(使用 @RequestBody/@ResponseBody 的 HTTP 消息转换)
  6. 如果 Jackson 在类路径上,则添加对读取和写入 JSON 的支持(与 #5 相同)

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

于 2016-10-09T09:36:04.120 回答