我是Spring MVC的新手,我有一个问题要问你。
我知道 tag<mvc:annotation-driven />
处理 servlet 配置中的注释,例如 @Controller、@RequestMapping,但我使用的是 portlet,我很好奇这个注释在这里是如何工作的?
感谢!
它的工作原理相同。
如果使用java 配置,您将使用:
...
@Configuration
@EnableWebMvc <- (equivalent to <mvc:annotation-driven />)
@ComponentScan(basePackageClasses = { MyConfiguration.class })
...
或者,如果您使用xml 配置,您将使用:
...
<mvc:annotation-driven />
<context:component-scan base-package="package.*" />
...
mvc:annotation-driven用于启用具有默认配置的 Spring MVC 组件。
如果您不包含 mvc:annotation-driven 并且如果您已经使用 context:component-scan 来创建 bean 或在 XML 文件中定义了 bean,那么您的 MVC 应用程序也可以工作
.但是,mvc:annotation-driven 在配置特殊 bean 方面做了一些额外的工作,如果您不在 XML 文件中使用此元素,这些 bean 就不会配置。
此标记将注册将请求分派到@Controllers所需的处理程序映射和处理程序适配器。此外,它还根据类路径中存在的内容应用一些默认值。此类默认值为:
- 使用 Spring 3 类型转换服务作为更简单、更多 JavaBeans PropertyEditors 的强大替代方案
-
支持使用 @NumberFormat 设置数字字段的格式
-
支持格式化日期、日历和乔达时间字段 @DateTimeFormat,如果乔达时间在类路径上
- 支持使用 @Valid 验证@Controller输入(如果是 JSR-303) 提供程序位于类路径上
- 支持读取和写入 XML(如果 JAXB 位于类路径上)
- 支持读取和写入 JSON,如果 Jackson 在类路径上
上下文:Spring 配置文件中的组件扫描元素将消除在 XML 文件中声明所有 bean 的需要。查看 spring 配置文件中的以下声明:
<context:component-scan base-package="org.controller"/>
Spring 应用程序配置文件中的上述声明将扫描指定包中的类并创建 bean 实例。请注意,仅当该类使用正确的注释进行注释时,它才能创建 bean。以下是此元素扫描的批注:
- @Component
- @Repository
- @Service
- @Controller