【问题标题】:Spring Framework: what is the purpose of <mvc:annotation-driven />Spring Framework:<mvc:annotation-driven />的目的是什么
【发布时间】:2015-05-05 06:07:48
【问题描述】:

我对 Spring 比较陌生,对标签有点困惑。

在浏览了文档并查看了不同的帖子之后,它的主要用途似乎是 Spring MVC 要求将请求分派到 @Controllers。

我用两个 requestMappings 创建了一个控制器:

@RequestMapping(method=RequestMethod.GET, value="/health") @RequestMapping(method=RequestMethod.GET, value="/test")

我在 servlet.xml 中测试了使用和不使用的 Web 应用程序,看起来与是否省略有任何区别。这些请求似乎仍然可以很好地到达我的控制器。

谁能给我解释一下这个标签到底是干什么用的?

提前致谢!

【问题讨论】:

    标签: spring-mvc


    【解决方案1】:

    Spring 默认提供对@Controller@RequestMapping 的支持。但是,通过启用mvc:annotation-driven,您可以获得处理映射到带注释控制器方法的请求的支持,例如声明性验证、格式化和转换服务。 spring's blog 的摘录,介绍了新的配置功能

    它会根据您的内容应用合理的默认值 类路径。此类默认值包括:

    • 使用 Spring 3 Type ConversionService 作为 JavaBeans PropertyEditors 的更简单、更健壮的替代方案

    • 支持使用@NumberFormat 格式化数字字段

    • 如果 Joda Time 在类路径中,则支持使用 @DateTimeFormat 格式化 Date、Calendar 和 Joda Time 字段
    • 如果 JSR-303 Provider 在类路径上,则支持使用 @Valid 验证 @Controller 输入
    • 如果 JAXB 在类路径上,则支持读取和写入 XML
    • 如果 Jackson 在类路径中,则支持读取和写入 JSON

    另一个相关有用的博客post

    如果这个标签没有添加到 XML 中,那么你将不得不手动 为 HandlerAdapter、HandlerMapping 等组件定义 bean, 绑定初始化器、请求消息转换器等。这个标签有帮助 注册以下组件。

    • DefaultAnnotationHandlerMapping - 这是HandlerMapping 将 HTTP 请求映射到处理程序方法的实现 使用 @RequestMapping 注释定义。
    • AnnotationMethodHandlerAdapter - 负责扫描 控制器来识别用@MVC注解的方法(和参数) 注释。它扫描并缓存带有注释的处理程序方法 @RequestMapping。还处理@RequestParam@ModelAttribute@SessionAttributes@InitBinder 注释。
    • ConfigurableWebBindingInitializer - Web 数据的初始化器 粘合剂。帮助以声明方式配置 Web Binder 验证器、转换服务、属性编辑器等。
    • LocalValidatorFactoryBean - 实现验证器接口和 启用 JSR303 验证。这被注入 ConfigurableWebBindingInitializer
    • FormattingConversionServiceFactoryBean - 一个转换工厂 返回日期和数字等基本对象的转换服务。 这个工厂再次注入ConfigurableWebBindingInitializer
    • 支持消息转换器

    终于在官方docs有了更正式的定义

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2012-02-19
      • 2012-11-29
      相关资源
      最近更新 更多