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


155

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

他们介绍了<mvc:annotation-driven />一些黑魔法。预期仅在servlet配置文件中声明。

在Spring 2.5中,我刚刚使用,<context:annotation-config />并且<context:component-scan base='...'/>application-context.xmlservlet分配器XML配置文件中声明了标记,并使用了要扫描的基本包。

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

Answers:


150

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

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


3
我应该在applicationContext和servlet中都声明context:annotation-config,尤其是如果我在component-scan标签中使用不同的基本包时?
glaz666

2
是的,您需要<context:annotation-config>在每种情况下使用。
skaffman

61
@skaffman:<mvc:annotation-driven>不是毫无意义的,只是名字不正确。实际上它配置为新的Spring MVC支持诸如声明性验证用@Valid,具有HTTP消息转换@RequestBody/ @ResponseBody,新字段转换架构等
axtavt

5
@Richards:通常是的,看到blog.springsource.com/2009/12/21/...
axtavt

7
这个答案是完全错误的,因为mvc:注释驱动对于转换和验证至关重要。这里唯一正确和有价值的事情是@axtavt的评论。
Konrad Garus 2012年

36

还有的使用了一些更详细<mvc:annotation-driven />春天文档。简而言之,<mvc:annotation-driven />它使您可以更好地控制Spring MVC的内部运作。除非需要文档前述部分中概述的一项或多项功能,否则无需使用它。

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


我想在xml中看到一组与此标签相似的设置。很久以前,我遇到过这个例子,但是还不完整,AFAIR。
glaz666

7

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

  1. 配置Spring 3 Type ConversionService(PropertyEditors的替代)
  2. 添加了对使用@NumberFormat格式化Number字段的支持
  3. 添加对使用@DateTimeFormat格式化日期,日历和乔达时间字段的支持(如果乔达时间位于类路径上)
  4. 如果在类路径上有JSR-303提供者,则添加对使用@Valid验证@Controller输入的支持。
  5. 如果JAXB位于类路径上,则添加对读写XML的支持(使用@ RequestBody / @ ResponseBody的HTTP消息转换)
  6. 如果Jackson在类路径中(与#5相同),则增加了对读取和写入JSON的支持。

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


2
来源和MVC的更多详细信息:注解驱动程序- spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0
Aniket塔库尔

所以您的意思是说,如果我需要@Autowired, @Resource, @Required, @PostConstruct AND- @RequestBody, @ResponseBody所有这些注释,那么我将不得不mvc:annotation-driven context:annotation-config在配置中添加这两个标签?
R Dhaval '18 -10-23
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.