《Spring实战(第4版)》——1.4 Spring的新功能

简介: 当本书的第3版交付印刷的时候,当时Spring的最新版本是3.0.5。那大约是在3年前,从那时到现在发生了很多的变化。Spring框架经历了3个重要的发布版本——3.1、3.2以及现在的4.0——每个版本都带来了新的特性和增强,以简化应用程序的研发。

本节书摘来自异步社区《Spring实战(第4版)》一书中的第1章,第1.4节,作者: 【美】Craig Walls(沃尔斯)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.4 Spring的新功能

当本书的第3版交付印刷的时候,当时Spring的最新版本是3.0.5。那大约是在3年前,从那时到现在发生了很多的变化。Spring框架经历了3个重要的发布版本——3.1、3.2以及现在的4.0——每个版本都带来了新的特性和增强,以简化应用程序的研发。Spring Portfolio中的一些成员项目也经历了重要的变更。

本书也进行了更新,试图涵盖这些发布版本中众多最令人兴奋和有用的特性。但现在,我们先简要地了解一下Spring带来了哪些新功能。

1.4.1 Spring 3.1新特性
Spring 3.1带来了多项有用的新特性和增强,其中有很多都是关于如何简化和改善配置的。除此之外,Spring 3.1还提供了声明式缓存的支持以及众多针对Spring MVC的功能增强。下面的列表展现了Spring 3.1重要的功能升级:

为了解决各种环境下(如开发、测试和生产)选择不同配置的问题,Spring 3.1引入了环境profile功能。借助于profile,就能根据应用部署在什么环境之中选择不同的数据源bean;
在Spring 3.0基于Java的配置之上,Spring 3.1添加了多个enable注解,这样就能使用这个注解启用Spring的特定功能;
添加了Spring对声明式缓存的支持,能够使用简单的注解声明缓存边界和规则,这与你以前声明事务边界很类似;
新添加的用于构造器注入的c命名空间,它类似于Spring 2.0所提供的面向属性的p命名空间,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所提供的新功能以外,同等重要的是要注意Spring 3.1不再支持的功能。具体来讲,为了支持原生的EntityManager,Spring的JpaTemplate和JpaDaoSupport类被废弃掉了。尽管它们已经被废弃了,但直到Spring 3.2版本,它依然是可以使用的。但最好不要再使用它们了,因为它们不会进行更新以支持JPA 2.0,并且已经在Spring 4中移除掉了。

现在,让我们看一下Spring 3.2提供了什么新功能。

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之前,只能通过ContentNegotiatingViewResolver使用完整的内容协商(full content negotiation)功能。但是在Spring 3.2中,完整的内容协商功能可以在整个Spring MVC中使用,即便是依赖于消息转换器(message converter)使用和产生内容的控制器方法也能使用该功能;
Spring MVC 3.2包含了一个新的@MatrixVariable注解,这个注解能够将请求中的矩阵变量(matrix variable)绑定到处理器的方法参数中;
基础的抽象类AbstractDispatcherServletInitializer能够非常便利地配置DispatcherServlet,而不必再使用web.xml。与之类似,当你希望通过基于Java的方式来配置Spring的时候,可以使用Abstract- Annotat ionConfigDispatcherServletInitializer的子类;
新增了ResponseEntityExceptionHandler,可以用来替代Default- HandlerException Resolver。ResponseEntityExceptionHandler方法会返回ResponseEntity

@Autowired、@Value和@Bean注解能够作为元注解,用于创建自定义的注入和bean声明注解;
@DateTimeFormat注解不再强依赖JodaTime。如果提供了JodaTime,就会使用它,否则的话,会使用SimpleDateFormat;
Spring的声明式缓存提供了对JCache 0.5的支持;
支持定义全局的格式来解析和渲染日期与时间;
在集成测试中,能够配置和加载WebApplicationContext;
在集成测试中,能够针对request和session作用域的bean进行测试。
在本书的多个章节中,都能看到Spring 3.2的特性,尤其是在Web和REST相关的章节中。

1.4.3 Spring 4.0新特性
当编写本书时,Spring 4.0是最新的发布版本。在Spring 4.0中包含了很多令人兴奋的新特性,包括:

Spring提供了对WebSocket编程的支持,包括支持JSR-356——Java API for WebSocket;
鉴于WebSocket仅仅提供了一种低层次的API,急需高层次的抽象,因此Spring 4.0在WebSocket之上提供了一个高层次的面向消息的编程模型,该模型基于SockJS,并且包含了对STOMP协议的支持;
新的消息(messaging)模块,很多的类型来源于Spring Integration项目。这个消息模块支持Spring的SockJS/STOMP功能,同时提供了基于模板的方式发布消息;
Spring是第一批(如果不说是第一个的话)支持Java 8特性的Java框架,比如它所支持的lambda表达式。别的暂且不说,这首先能够让使用特定的回调接口(如RowMapper和JdbcTemplate)更加简洁,代码更加易读;
与Java 8同时得到支持的是JSR-310——Date与Time API,在处理日期和时间时,它为开发者提供了比java.util.Date或java.util.Calendar更丰富的API;
为Groovy开发的应用程序提供了更加顺畅的编程体验,尤其是支持非常便利地完全采用Groovy开发Spring应用程序。随这些一起提供的是来自于Grails的BeanBuilder,借助它能够通过Groovy配置Spring应用;
添加了条件化创建bean的功能,在这里只有开发人员定义的条件满足时,才会创建所声明的bean;
Spring 4.0包含了Spring RestTemplate的一个新的异步实现,它会立即返回并且允许在操作完成后执行回调;
添加了对多项JEE规范的支持,包括JMS 2.0、JTA 1.2、JPA 2.1和Bean Validation 1.1。
可以看到,在Spring框架的最新发布版本中,包含了很多令人兴奋的新特性。在本书中,我们将会看到很多这样的新特性,同时也会学习Spring中长期以来一直存在的特性。

相关文章
|
1月前
|
XML Java 数据库连接
spring boot 参数的过滤注解与实战
在Spring Boot应用中,对于入参的过滤,通常会涉及到对Web层的数据验证和处理。Spring Boot借助Spring框架提供了强大的验证框架支持,主要基于JSR-303/JSR-380(Bean Validation API)规范,以及Spring自身的@Valid或@Validated注解来实现请求参数的验证。以下是一些常见的使用案例来展示如何对参数进行过滤和验证。
29 1
|
2月前
|
Dubbo Java 应用服务中间件
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
45 0
|
1月前
|
人工智能 JSON 前端开发
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
|
2月前
|
消息中间件 存储 监控
搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】
搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】
32 1
|
2月前
|
消息中间件 安全 druid
GitHub昙花一现!《Spring Boot趣味实战课》神作开源几分钟被下架
今天给大家分享好书了:刘水镜老师的 《Spring Boot趣味实战课》,网上依旧是没有开源版本!小编会在文末附电子版免费下载方式。 刘水镜是谁? 十余年持续技术文章输出,CSDN博客专家。2020年《 Spring Boot趣味私房课》专栏上线,凭借风趣幽默、深入浅出的写作风格深受读者好评。 《Spring Boot趣味实战课》 内容丰富、趣味实战是本书的两大特色 涵盖 Spring MVC、MyBatis Plus、Spring DaJPA、Spring Security、Quartz等主流框架 整合MySQL. Druid、Redis、 RabbitMQ、Elastics
40 0
|
27天前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
64 1
|
2月前
|
设计模式 前端开发 Java
玩转Spring—Spring5新特性之Reactive响应式编程实战
玩转Spring—Spring5新特性之Reactive响应式编程实战
59 0
|
2月前
|
消息中间件 NoSQL Java
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
218 1
|
27天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
65 0
|
2月前
|
监控 IDE Java
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
44 0