> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/1/1.4spring-de-xin-gong-neng/1.4.2spring-3.2-xin-te-xing.md).

# 1.4.2　Spring 3.2 新特性

Spring 3.1 在很大程度上聚焦于配置改善以及其他的一些增强，包括 Spring MVC 的增强，而 Spring 3.2 是主要关注 Spring MVC 的一个发布版本。Spring MVC 3.2 带来了如下的功能提升：

* Spring 3.2 的控制器（Controller）可以使用 Servlet 3.0 的异步请求，允许在一个独立的线程中处理请求，从而将 Servlet 线程解放出来处理更多的请求；
* 尽管从 Spring 2.5 开始，Spring MVC 控制器就能以 POJO 的形式进行很便利地测试，但是 Spring 3.2 引入了 Spring MVC 测试框架，用于为控制器编写更为丰富的测试，断言它们作为控制器的行为行为是否正确，而且在使用的过程中并不需要 Servlet 容器；
* 除了提升控制器的测试功能，Spring 3.2 还包含了基于 RestTemplate 的客户端的测试支持，在测试的过程中，不需要往真正的 REST 端点上发送请求；
* @ControllerAdvice 注解能够将通用的 @ExceptionHandler、@InitBinder 和 @ModelAttributes 方法收集到一个类中，并应用到所有控制器上；
* 在 Spring 3.2 之前，只能通过 ContentNegotiatingViewResolve r使用完整的内容协商（full content negotiation）功能。但是在 Spring 3.2 中，完整的内容协商功能可以在整个 Spring MVC 中使用，即便是依赖于消息转换器（message converter）使用和产生内容的控制器方法也能使用该功能；
* Spring MVC 3.2 包含了一个新的 @MatrixVariable 注解，这个注解能够将请求中的矩阵变量（matrix variable）绑定到处理器的方法参数中；
* 基础的抽象类 AbstractDispatcherServletInitializer 能够非常便利地配置 DispatcherServlet，而不必再使用 web.xml。与之类似，当你希望通过基于Java 的方式来配置 Spring 的时候，可以使用 AbstractAnnotationConfigDispatcherServletInitializer 的子类；
* 新增了 ResponseEntityExceptionHandler，可以用来替代 DefaultHandlerExceptionResolver。ResponseEntityExceptionHandler 方法会返回 ResponseEntity，而不是 ModelAndView；
* RestTemplate 和 @RequestBody 的参数可以支持范型；
* RestTemplate 和 @RequestMapping 可以支持 HTTP PATCH 方 法；
* 在拦截器匹配时，支持使用 URL 模式将其排除在拦截器的处理功能之外。

虽然 Spring MVC 是 Spring 3.2 改善的核心内容，但是它依然还增加了多项非 MVC 的功能改善。下面列出了 Spring 3.2 中几项最为有意思的新特性：

* @Autowired、@Value 和 @Bean 注解能够作为元注解，用于创建自定义的注入和 bean 声明注解；
* @DateTimeFormat 注解不再强依赖 JodaTime。如果提供了 JodaTime，就会使用它，否则的话，会使用SimpleDateFormat；
* Spring 的声明式缓存提供了对 JCache 0.5 的支持；
* 支持定义全局的格式来解析和渲染日期与时间；
* 在集成测试中，能够配置和加载 WebApplicationContext；
* 在集成测试中，能够针对 request 和 session 作用域的 bean 进行测 试。

在本书的多个章节中，都能看到 Spring 3.2 的特性，尤其是在 Web 和 REST 相关的章节中。
