Spring 3.1 新功能
Spring 3.1 提供了声明式缓存的支持以及众多针对 Spring MVC 的功能增强。
以下为 Spring 3.1 重要的功能升级:
- Spring 3.1 引入了环境 profile 功能,就能根据应用部署在什么环境之中选择不同的数据源 bean;
- 在 Spring 3.0 基于 Java 的配置之上,Spring 3.1 添加了多个 enable 注解;
- 添加了 Spring 对声明式缓存的支持,能够使用简单的注解声明缓存边界和规则;
- 新添加的用于构造器注入的 c 命名空间,它类似于 Spring 2.0 所提供的面向属性的 p 命名空间(用于属性注入);
- Spring 开始支持 Servlet 3.0,包括在基于 Java 的配置中声明 Servlet 和 Filter,而不再借助于 web.xml;
- 改善 Spring 对 JPA 的支持,使得它能够在 Spring 中完整地配置 JPA,不必再使用 persistence.xml 文件。
Spring 3.1 还包含了多项针对 Spring MVC 的功能增强:
- 自动绑定路径变量到模型属性中;
- 提供了 @RequestMappingproduces 和 consumes 属性,用于匹配请求中的 Accept 和 Content-Type 头部消息;
- 提供了 @RequestPart 注解,用于将 multipart 请求中的某些部分绑定到处理器的方法参数中;
- 支持 Flash 属性(在 redirect 请求之后依然能够存活的属性)以及用于在请求间存放 flash 属性的 RedirectAttributes 类型。
Spring 3.1 不再支持的功能:为了支持原生的 EntityManager,Spring 的 JpaTemplate 和 JpaDaoSupport 类被废弃掉了,并且在 Spring 4.0 中移除掉了。
Spring 3.2 新功能
以下为 SpringMVC 3.2 重要的功能升级:
- Spring 3.2 的控制器(Controller)可以使用 Servlet 3.0 的异步请求,允许在一个独立的线程中处理请求,从而将 Servlet 线程解散放出来处理更多的请求;
- Spring 3.2 引入 Spring MVC 测试框架,用于为控制器编写更为丰富的测试,断言它们作为控制器的行为是否正确,而且在使用的过程中并不需要 Servlet 容器;
- Spring 3.2 还包含了基于 RestTemplate 的客户端的测试支持,在测试的过程中,不需要往真正的 REST 端点上发送请求;
- @ControllerAdvice 注解能够将通用的 @ExceptionHandler、@InitBinder 和 @ModelAttributes 方法收集到一个类中,并应用到所有控制器上;
- 在 Spring 3.2 中,完整的内容协商功能可以在整个 Spring MVC 中使用,即便是依赖于消息转换器使用和产生内容的控制器方法也能使用该功能;
- Spring MVC 3.2 包含了一个新的 @MatrixVariable 注解,这个注解能够将请求中的矩阵变量绑定到处理器的方法参数中;
- 基础的抽象类 AbstractDispatcherServletInitializer 能够非常便利的配置 DispatcherServlet,而不必再使用 web.xml 。与之类似,当你希望通过基于 Java 的方式来配置 Spring 的时候,可以使用 Abstract-AnnotationConfigDispatcherServletInitializer 的子类;
- 新增了 ResponseEntityExceptionHandler,可以用来代替 Default-HandlerExceptionResolver。ResponseEntityExceptionHandler 方法会返回 ResponseEntitu《Object》,而不是 ModelAndView;
- RestTemplate 和 @ResquestBody 的参数可以支持范型;
- RestTemplate 和 @RequestMapping 可以支持 HTTP PATCH 方法;
- 在拦截器匹配时,支持使用 URL 模式将其排除在拦截器的处理功能之外。
以下为 Spring 3.2 的新特性:
- @Autowired、@Value 和 @Bean 注解能够作为元注解,用于创建自定义的注入和 bean 声明注解;
- @DateTimeFormat 注解不再强依赖 JodaTime。如果提供了 JodaTime,就会使用它,否则的话,会使用 SimpleDateFormat;
- Spring 的声明式缓存提供了对 JCache 0.5 的支持;
- 支持定义全局的格式来解析和渲染日期与时间;
- 在集成测试中,能够配置和加载 WebApplicationContext;
- 在集成测试中,能够针对 request 和 session 作用域的 bean 进行测试。
Spring 4.0 新功能
- Spring 提供了对 WebSocket 编程的支持,包括支持 JSR-356——Java API for WebSocket;
- Spring 4.0 在 WebSocket 之上提供了一个高层次的面向消息的编程模型,该模型基于 SockJS,并且包含了对 STOMP 协议的支持;
- 新的消息模块,很多的类型来源于 Spring Integration 项目。这个消息模块支持 Spring 的 SockJS/STOMP 功能,同时提供了基于模板的方式发布消息;
- Spring 是第一批支持 Java 8 特性的 Java 框架,比如它所支持的 lambda 表达式;
- 与 Java 8 同时得到支持的是 JSR-310——Date 与 Time API,在处理日期和时间时,它为开发者提供了比 java.util.Date 或 java.util.Calendar 更丰富的 API;
- 为 Groovy 开发的应用程序提供了更加顺畅的编程体验;
- 添加了条件化创建 bean 的功能,在这里只有开发人员定义的条件满足时,才会创建所声明的 bean;
- Spring 4.0 包含了 Spring RestTemplate 的一个新的异步实现,它会立即返回并且允许在操作完成后执行回调;
- 添加了对多项 JEE 规范的支持,包括 JMS 2.0、JTA 1.2、JPA 2.1 和 Bean Validation 1.1。