Spring 3.1 M2:Spring MVC 增强功能
本文重点介绍 Spring 3.1 M2 中 Spring MVC 的新特性。以下是相关主题:
- MVC 命名空间的基于代码的等效项。
- 可自定义的 @MVC 处理。
- 编程模型改进。
简要提醒一下,本文讨论的功能在 Greenhouse 项目中已得到应用。
Spring MVC 的基于代码的配置
正如 Chris 在上周五的博客文章中所指出的,XML 命名空间极大地简化了配置,但也降低了透明度,有时也牺牲了灵活性。这同样适用于 MVC 命名空间,它支持许多自定义,但并非所有可用的自定义都支持。这意味着您要么可以使用它,要么就得放弃它。我们认为基于代码的配置可以解决这个问题,并提供从简单到高级的路径。
让我们从这个简单而熟悉的片段开始
<mvc:annotation-driven />
虽然使用注解式控制器不是必需的,但 <mvc:annotation-driven> 做了许多有用的事情——它会检测 JSR-303 (Bean Validation) 实现的存在并与之集成数据绑定,如果 Jackson JSON 库可用,它会添加一个 JSON 消息转换器,以及其他一些可以节省大量配置的工作。
现在,让我们将其与基于代码的配置进行匹配
@Configuration
@EnableWebMvc
public class WebConfig {
}
这里的@EnableWebMvc 导入了一个 @Configuration 类,它提供了与 <mvc:annotation-driven> 相同的功能。就是这么简单。
下一步是使用 <mvc:annotation-driven> 中的属性,例如提供一个 FormattingConversionService,或者添加一个子元素,例如配置消息转换器,或者使用其他 MVC 命名空间元素,如 <mvc:interceptors>、<mvc:resources> 等。
让我们看看如何在代码中完成这一切
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
// register converters and formatters...
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// add message converters...
}
@Override
public void configureInterceptors(InterceptorConfigurer configurer) {
configurer.addInterceptor(new…