Spring 4.3 的新功能和增强
转载自https://my.oschina.net/waylau/blog/698186
核心容器改进
- 核心容器额外提供了更丰富的元数据来改进编程。
- 默认 Java 8 的方法检测为 bean 属性的 getter/setter 方法。
- 如果目标 bean 只定义了一个构造函数,则它无需要指定
@Autowired注解 @Configuration类支持构造函数注入。- 任何 SpEL 表达式用于指定
@EventListener的condition引用到 bean(例如@beanName.method())。 - 组成注解现在可以用一个包含元注解中的数组属性的数组组件类型的元素来覆盖。例如,
@RequestMapping的的String[] path可以在组成注解用String path覆盖。 @Scheduled和@Schedules现在是作为元注解用来通过属性覆盖来创建自定义的组成注解。@Scheduled适当支持任何范围内的 bean。
数据访问改进
jdbc:initialize-database 和 jdbc:embedded-database 支持可配置的分离器被应用到每个脚本。
缓存改进
Spring 4.3 允许在一个给定的 key 并发调用时实现要同步,使得相应的值只计算一次。这是一个可选的功能,通过设置@Cacheable的新的 sync 属性来启用。此功能引入了Cache接口的一个重大更改,即get(Object key, Callable<T> valueLoader)方法已添加。
Spring 4.3 还改进了缓存抽象如下:
- SpEL 表达式对于缓存相关的注解,现在可以引用 bean(即
@beanName.method()))。 ConcurrentMapCacheManager和ConcurrentMapCache现在通过一个新的storeByValue属性支持缓存实体的序列化。@Cacheable,@CacheEvict,@CachePut和@Caching现在是作为元注解用来通过属性覆盖来创建自定义的组成注解。
JMS 改进
@SendTo现在可以在类级别指定一个共同回复目标。@JmsListener和@JmsListeners现在是作为元注解用来通过属性覆盖来创建自定义的组成注解。
Web 改进
- 内建支持 HTTP HEAD 和 HTTP OPTIONS.
- 新的组合注解
@GetMapping,@PostMapping,@PutMapping,@DeleteMapping, 和@PatchMapping用于@RequestMapping。 - 新的
@RequestScope,@SessionScope, 和@ApplicationScope用于 web 范围的组合注解 - 新的
@RestControllerAdvice注解是@ControllerAdvice和@ResponseBody的语义结合 @ResponseStatus现在在类级别被支持,并被所有方法继承- 新的
@SessionAttribute注解用于访问 session 属性 (见例子) - 新的
@RequestAttribute注解用于访问请求属性 (见例子) @ModelAttribute允许通过binding=false来避免数据绑定(见引用)- 错误和自定义抛出,将被统一到 MVC 异常处理器中处理
- HTTP 消息转换编码一致处理,包括默认 UTF-8 用于多部分文本内容
- 静态资源处理使用配置的
ContentNegotiationManager用于媒体类型计算 RestTemplate和AsyncRestTemplate支持通过DefaultUriTemplateHandler来实现严格的URI变量编码AsyncRestTemplate支持请求拦截
WebSocket 消息改进
@SendTo和@SendToUser现在可以在类级被指定为共享共同的目的地。
测试改进
- 为了支持 Spring TestContext Framework ,现在需要 JUnit 4.12 或者更高的版本
- 新的
SpringRunner关联于SpringJUnit4ClassRunner - 测试相关的注解,现在可以在接口上声明了。例如,基于 Java 8 的接口上使用测试接口
- 空声明的
@ContextConfiguration现在将会完全忽略,如果检测到默认的 XML 文件, Groovy 脚本, 或@Configuration类型 @Transactional测试方法不再需要public(如, 在 TestNG 和 JUnit 5)@BeforeTransaction和@AfterTransaction不再需要public,并且在 基于 Java 8 的接口的默认方法上声明- 在Spring TestContext Framework 的
ApplicationContext的缓存现在有界为32默认最大规模和最近最少使用驱逐策略。最大的大小可以通过设置称为spring.test.context.cache.maxSize一个 JVM 系统属性或 Spring 配置。 ContextCustomizerAPI 用于自定义测试ApplicationContext在 bean 定义加载到上下文后但在上下文被刷新前。定制工具可以在全球范围由第三方进行注册,而无需要实现一个自定义的ContextLoader。@Sql和@SqlGroup现在作为元注解通过覆盖属性来创建自定义组合注解ReflectionTestUtils现在在 set 或 get 一个字段时,会自动解开代理。- 服务器端的 Spring MVC 测试支持具有多个值的响应头。
- 服务器端的 Spring MVC 测试解析表单数据的请求内容和填充请求参数。
- 服务器端的 Spring MVC 测试支持 mock 式的断言来调用处理程序方法。
- 客户端 REST 测试支持允许指定多少次预期的请求以及期望的声明顺序是否应该被忽略(参见15.6.3,“客户端REST测试”)。
- 客户端 REST 测试支持请求主体表单数据的预期。
支持新的类库和服务器
- Hibernate ORM 5.2 (同样很好的支持 4.2/4.3 和 5.0/5.1,不推荐 3.6 )
- Jackson 2.8 (在Spring 4.3,最低至 Jackson 2.6+ )
- OkHttp 3.x (仍然并行支持 OkHttp 2.x)
- Netty 4.1
- Undertow 1.4
- Tomcat 8.5.2 以及 9.0 M6
参考引用
Spring 4.3 的新功能和增强的更多相关文章
- 详细介绍Spring 5的那些新特性与增强
Spring5 是一个重要的版本,距离SpringFramework4差不多四年.在此期间,大多数增强都是在 SpringBoot 项目中完成的.在本文中,我们将很快了解到Spring5发行版中的一些 ...
- SCVMM之Windows Server2012 R2新功能
在Windows Server 2012 R2中可以通过使用共享的虚拟硬盘VHDX文件的方法来模拟IP SAN,来为虚拟机创建群集提供共享存储.这样为虚拟机创建群集时就不用再像以前一样通过使用软件模拟 ...
- sqlserver2016新功能
SQL Server 2016中的新功能(数据库引擎) 2017年1月13日 23分钟阅读时长 作者 本人建了个领优惠卷购物群,平时网购可以省点钱.有需要的加群:511169656交流,谢谢 本主题 ...
- iOS10 新特性-新功能,以及ReplayKit库
iOS的10.0 本文总结了iOS的10,运行于目前推出iOS设备推出的主要开发者相关的功能. iOS版10引入了新的方法来增加您的应用程序通过帮助系统参与在适当的时候建议你的应用程序给用户.如果你在 ...
- MaxCompute新功能发布
2018年Q3 MaxCompute重磅发布了一系列新功能. 本文对主要新功能和增强功能进行了概述. 实时交互式查询:Lightning on MaxCompute 生态兼容:Spark on Max ...
- Spring总结 4.AOP之为对象添加新功能
Spring除了提供增强原有功能的方法外,还提供了为一个对象引入新功能的方法.如下: package cn.powerfully.service; public interface IService ...
- Spring实战(十)Spring AOP应用——为方法引入新功能、为对象引入新方法
切面最基本的元素是通知和切点,切点用于准确定位应该在什么地方应用切面的通知. 1.Spring借助AspectJ的切点表达式语言来定义Spring切面 在Spring中,要使用AspectJ的切点表达 ...
- Spring Boot 2.2 增加了一个新功能,启动飞起~
前几天栈长分享了一个好玩的框架:一个比Spring Boot快44倍的Java框架!,是不是感觉 Spring Boot 略慢?今天讲一下 Spring Boot 添加的这个新特性,可以大大提升 Sp ...
- 详细介绍Spring Boot 2.0的那些新特性与增强
以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...
随机推荐
- vue中使用key管理可复用的元素
1.概述 Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染. key解决上述问题之外的情景:这两个元素是完全独立的,不要复用它们. 2.示例 <!DOCTYPE html&g ...
- C语言八进制和十六进制数
一 赋值 int dex = 100;// 默认十进制 int oct = 0144;// 八进制,以0開始 int hex = 0x64;// 十六进制,以0x開始 二 输出 void show(i ...
- C#:用SqlBulkCopy来实现批量插入数据
SqlBulkCopy是.net2.0的新特性,平时用的很少,但是其功能却是非常强大,对于批量插入数据性能非常优越 代码 /// /// bulk插入/// private void BulkInse ...
- java使用Runtime.exec()运行windwos dos或linux shell命令
使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试 实例代码: package com.bookoo.test.command; imp ...
- elementary OS安装搜狗输入法
© 版权声明:本文为博主原创文章,转载请注明出处 1.添加搜狗输入法的软件源 sudo add-apt-repository ppa:fcitx-team/nightly 1.1 可能遇到的问题: s ...
- spring学习六----------Bean的配置之Aware接口
© 版权声明:本文为博主原创文章,转载请注明出处 Aware Spring提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化后,可以获取相应的资源 通过Aware接口,可以对S ...
- HDU BestCoder Round #1 1002 项目管理
项目管理 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- less1.5中的减错误
(@bodywidth)-@leftwidth即在第一个变量外加括号---正确 @bodywidth-@leftwidth即直接使用不加括号--------错误
- android利用apkplug框架实现主应用与插件通讯(传递随意对象)实现UI替换
时光匆匆,乍一看已半年过去了,经过这半年的埋头苦干今天最终有满血复活了. 利用apkplug框架实现动态替换宿主Activity中的UI元素.以达到不用更新应用就能够更换UI样式的目的. 先看效果图: ...
- Inno Setup 使用笔记
使 用 笔 记https://blog.csdn.net/dongshibo12/article/details/79095971 1.Inno Setup 是什么?Inno Setup 是一个免费的 ...