在 servlet 中,< mvc: Annotation-drive/> 和 < context: Annotation-config/> 之间的区别是什么?

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

他们已经引入了 <mvc:annotation-driven />,它有一些神奇的功能。这只能在 servlet 配置文件中声明。

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

因此,我想知道在 servlet 配置中 mvc:annotation-drivencontext:annotation-config标记之间的区别是什么,以及在 Spring3配置文件中可以消除哪些内容?

156294 次浏览

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

<mvc:annotation-driven />声明了对注释驱动的 MVC 控制器的明确支持(例如,@RequestMapping@Controller,尽管默认行为支持这些控制器) ,以及通过 @Valid添加对声明性验证的支持和使用 @RequestBody/ResponseBody进行消息体编组的支持。

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

此外,还有其他“注释驱动”标记可用于在其他 Spring 模块中提供附加功能。例如,<transaction:annotation-driven />支持使用@Transaction 注释,而@Calculed 等人需要使用 <task:annotation-driven />。.

注释驱动的 是在 Spring 3.0中添加的一个标记,它执行以下操作:

  1. 配置 Spring3类型转换服务(可替代 PropertyEditor)
  2. 添加对使用@NumberFormat 格式化 Number 字段的支持
  3. 如果 Joda Time 位于类路径上,则添加对使用@DateTimeFormat 格式化 Date、 Calendar 和 Joda Time 字段的支持
  4. 添加对使用@Valid 验证@Controller 输入的支持,如果类路径上有 JSR-303提供程序
  5. 如果 JAXB 位于类路径上(HTTP 消息转换为@RequestBody/@ResponseBody) ,则添加对读写 XML 的支持
  6. 添加对读写 JSON 的支持,如果 Jackson 在类路径中(与 # 5相同)

上下文: 注释-配置 在相同的应用程序上下文中查找 bean 上的注释,并声明支持所有常规注释,如@Autowired、@Resource、@Refied、@PostConstruction 等。