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-driven
和context: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中添加的一个标记,它执行以下操作:
- configurationSpring 3typesConversionService(PropertyEditors的替代)
- 添加对使用@NumberFormat格式化数字字段的支持
- 如果Joda时间位于类path中,则添加对使用@DateTimeFormat格式化date,日历和Joda时间字段的支持
- 如果JSR-303提供程序位于类path中,则添加对使用@Validvalidation@Controllerinput的支持
- 如果JAXB位于类path中,则添加对读取和写入XML的支持(使用@ RequestBody / @ ResponseBody转换HTTP消息)
- 如果Jackson在类path上(如#5所示),则增加对读写JSON的支持
context:annotation-config在定义的同一应用程序上下文中查找bean的注释,并声明支持所有常规注释(如@Autowired,@Resource,@Required,@PostConstruct等)。