spring 5.x(1)-----Spring Framework 5.x中的新功能
Spring Framework 5.x中有什么新功能
5.1版中的新功能
一般核心修订
- 基础设施:
- 在类路径和模块路径上对JDK 11的无警告支持。
- 支持Graal原生图像约束(反射,参数名称)。
- 升级到Reactor Core 3.2和Reactor Netty 0.8(“Reactor Californium”)。
- 升级到ASM 7.0和CGLIB 3.2.8。
- 核心设施:
- FileSystemResource中的NIO.2路径支持(取代PathResource)。
- 核心类型和注释解析的性能改进。
- 一致地检测通用接口上的方法注释。
- 记录修订:
- 可以通过标准的Commons Logging检测Spring的JCL桥。
- 减少信息噪音,可读的调试日志,跟踪级别的详细信息。
核心容器
- Bean定义:
- 支持@Profile条件中的逻辑和/或表达式。
- 嵌套配置类的一致(非)检测。
- 精制Kotlin DSL。
- 相同类型的多个bean的唯一隐式bean名称。
- Bean检索:
- 在BeanFactory API中一致地不暴露零bean。
- 通过BeanFactory API进行编程的ObjectProvider检索。
- ObjectProvider可以为bean-of-type解析的可迭代/流访问。
- 单个构造函数场景中的空集合/映射/数组注入。
一般网站修订
- 在接口上也可以检测到控制器参数注释:
- 允许在控制器接口中完成映射合同。
- 支持更严格的URI变量编码
UriComponentsBuilder
:- 请参阅参考资料中更新的“URI编码”。
- Servlet使用HTTP PUT,PATCH和DELETE请求params:
- 请参阅“表单数据”。
Spring Web MVC
- 记录
- 改进,人性化,紧凑,DEBUG和TRACE记录。
- 控制潜在敏感数据的DEBUG记录。
- 通过
DispatcherServlet#enableLoggingRequestDetails
- 通过
- 更新的Web区域设置表示:
- 语言标签默认符合。
- CookieLocaleResolver发送符合RFC6265的时区cookie。
- 缺少标头,cookie,路径变量的特定MVC异常:
- 允许区分异常处理和状态代码。
- 外部配置的基本路径,用于注释控制器集。
- 通过以下方式集中处理“转发”类型标头
ForwardedHeaderFilter
:- 请参阅重要的升级说明。
- 除了GZip之外,还支持为Brotli提供预编码的静态资源。
Spring WebFlux
- 使用Reactor Netty 0.8运行时支持HTTP / 2服务器。
- 记录
- 改进,人性化,紧凑,DEBUG和TRACE记录。
- HTTP请求和WebSocket会话的相关日志消息。
- 控制潜在敏感数据的DEBUG记录。
- 通过
CodecConfigurer#defaultCodecs
- 通过
- 会话cookie现在必须
SameSite=Lax
防止CSRF攻击:- 请参阅OWASP页面和本文。
- DSL增强功能:
RouterFunction
没有静态导入的DSL样式构建器(示例)。- 精制Kotlin路由器DSL。
- 外部配置的基本路径,用于注释控制器集。
- 第三方集成:
- 支持Protobuf序列化,包括消息流。
WebClient
Jetty反应式HTTP客户端的连接器。
- WebSocket的:
- 支持
WebSocketSession
属性。 - 改进有关反应式WebSocket API处理的文档。
- 支持
- 除了GZip之外,还支持为Brotli提供预编码的静态资源。
spring消息
- 在@MessageMapping方法中支持被动客户端:
- 对Reactor和RxJava返回值的开箱即用支持。
- 选项以保留 STOMP代理的消息发布顺序。
@SendTo
并且@SendToUser
可以既被用于在控制器的方法。- 改进了有关处理消息和订阅的文档。
spring ORM
- 支持Hibernate ORM 5.3:
- Bean容器与Hibernate的新SPI集成。
- LocalSessionFactoryBean和HibernateTransactionManager支持JPA交互:
- 在同一事务中允许本机Hibernate以及JPA访问。
- 只读事务不再在内存中保留Hibernate实体快照:
- Session.setDefaultReadOnly(true)默认情况下。
- SAP HANA作为常见的JpaVendorAdapter数据库平台。
测试
- Hamcrest和XML断言
WebTestClient
。 MockServerWebExchange
可以配置固定WebSession
。
5.0版中有什么新功能
JDK 8+和Java EE 7+ Baseline
- 现在基于Java 8源代码级别的整个框架代码库。
- 通过推断的泛型,lambdas等提高可读性。
- Java 8的条件支持功能现在采用直接代码。
- 与JDK 9完全兼容,可用于开发和部署。
- 在类路径和模块路径上(具有稳定的自动模块名称)。
- 框架构建和测试套件在JDK 9上传递(默认情况下在JDK 8上运行)。
- 现在,Spring的相应功能需要Java EE 7 API级别。
- Servlet 3.1,Bean Validation 1.1,JPA 2.1,JMS 2.0
- 最近的服务器:例如Tomcat 8.5 +,Jetty 9.4 +,WildFly 10+
- 在运行时与Java EE 8 API级别的兼容性。
- Servlet 4.0,Bean Validation 2.0,JPA 2.2,JSON Binding API 1.0
- 针对Tomcat 9.0,Hibernate Validator 6.0,Apache Johnzon 1.1进行了测试
删除了包,类和方法
- 包
beans.factory.access
(BeanFactoryLocator
机制)。 - 包
jdbc.support.nativejdbc
(NativeJdbcExtractor
机制)。 - 包
mock.staticmock
从spring-aspects
模块中删除。- 不再支持
AnnotationDrivenStaticEntityMockingControl
了。
- 不再支持
- 包裹
web.view.tiles2
和orm.hibernate3/hibernate4
丢弃。- 最低要求:现在是Tiles 3和Hibernate 5。
- 删除支持:Portlet,Velocity,JasperReports,XMLBeans,JDO,Guava。
- 建议:如果需要,请继续使用Spring Framework 4.3.x.
- 在代码库中删除了许多已弃用的类和方法。
- 对生态系统中常用方法做出了一些妥协。
一般核心修订
- JDK 8+增强功能:
- 基于Java 8反射增强的高效方法参数访问。
- 核心Spring接口中Java 8默认方法的选择性声明。
- 一致使用JDK 7
Charset
和StandardCharsets
增强功能。
- JDK 9兼容性:
- 避免尽可能在JDK 9中弃用的JDK API。
- 通过构造函数进行一致的实例化(具有修订的异常处理)。
- 防御使用反射核心JDK类。
- 包级别的非null API声明:
- 可明确注释的可为空的参数,字段和返回值
@Nullable
。 - 主要用于IntelliJ IDEA和Kotlin,还有Eclipse和FindBugs。
- 一些Spring API不再容忍null值(例如in
StringUtils
)。
- 可明确注释的可为空的参数,字段和返回值
Resource
抽象提供isFile
了防御性getFile
访问的指标。readableChannel
在Resource
界面中还具有基于NIO的访问器。- 通过NIO.2流访问文件系统(不再
FileInput/OutputStream
使用)。
- Spring Framework 5.0自带了自己的Commons Logging桥:
spring-jcl
而不是标准的Commons Logging; 仍然是排他性/可覆盖的。- 无需任何额外桥接即可自动检测Log4j 2.x,SLF4J,JUL(java.util.logging)。
spring-core
附带ASM 6.0(CGLIB 3.2.5和Objenesis 2.6旁边)。
核心容器
- 支持任何
@Nullable
注释作为可选注入点的指示器。 - 功能风格
GenericApplicationContext
/AnnotationConfigApplicationContext
Supplier
基于bean定义器回调的基于bean的注册API。
- 在接口方法上一致地检测事务,缓存,异步注释。
- 在CGLIB代理的情况下。
- XML配置命名空间简化为未版本化的模式。
- 始终解决最新
xsd
文件; 不支持已弃用的功能。 - 特定于版本的声明仍受支持,但针对最新架构进行了验证。
- 始终解决最新
- 支持候选组件索引(作为类路径扫描的替代方案)。
Spring Web MVC
- Spring提供的
Filter
实现中的完整Servlet 3.1签名支持。 - 支持
PushBuilder
Spring MVC控制器方法中的Servlet 4.0 参数。 MaxUploadSizeExceededException
用于在公共服务器上进行Servlet 3.0多部分解析。- 通过
MediaTypeFactory
委托统一支持常见媒体类型。- 取代Java Activation Framework的使用。
- 与不可变对象的数据绑定(Kotlin / Lombok /
@ConstructorProperties
) - 支持JSON绑定API(使用Eclipse Yasson或Apache Johnzon替代Jackson和GSON)。
- 支持Jackson 2.9。
- 支持Protobuf 3。
- 反应堆3.1支持
Flux
和Mono
以及RxJava 1.3和2.1作为返回值从Spring MVC的控制器方法靶向使用新的反应性的WebClient
(见下文)或Spring MVC控制器弹簧数据活性库。 - 更高效的解析和扩展语法的新
ParsingPathMatcher
替代方案。AntPathMatcher
@ExceptionHandler
方法允许RedirectAttributes
参数(以及flash属性)。- 支持
ResponseStatusException
作为程序替代@ResponseStatus
。 - 支持
Invocable
通过直接呈现使用提供的脚本实现的脚本引擎ScriptEngine#eval(String, Bindings)
,以及ScriptTemplateView
通过新RenderingContext
参数的i18n和嵌套模板。 - Spring的FreeMarker宏(
spring.ftl
)现在使用HTML输出格式(需要FreeMarker 2.3.24+)。
Spring WebFlux
- 新的spring-webflux模块,
spring-webmvc
构建在反应式基础上的替代方案- 完全异步和非阻塞,旨在用于事件循环执行模型与传统的大型线程池(每个请求线程执行模型)。 - 反应性的基础设施中
spring-core
,例如Encoder
和Decoder
对对象的编码和解码流;DataBuffer
抽象,例如使用JavaByteBuffer
或NettyByteBuf
;ReactiveAdapterRegistry
用于控制器方法签名中的反应库的透明支持。 - 反应性基础设施
spring-web
包括HttpMessageReader
和HttpMessageWriter
建立和委托Encoder
和Decoder
; 服务器,HttpHandler
带有适配器(非阻塞)运行时,如Servlet 3.1+容器,Netty和Undertow;WebFilter
,WebHandler
以及Servlet API等价物的其他非阻塞合同替代方案。 @Controller
样式,基于注释的编程模型,类似于Spring MVC,但在WebFlux中支持,在反应堆栈上运行,例如能够支持反应类型作为控制器方法参数,从不阻塞I / O,一直遵守背压HTTP套接字,并在额外的非Servlet容器(如Netty和Undertow)上运行。- 新的函数式编程模型(“WebFlux.fn”)作为
@Controller
基于注释的编程模型的替代方案 - 使用端点路由API进行最小化和透明化,在相同的反应堆栈和WebFlux基础架构上运行。 - 全新
WebClient
的HTTP呼叫功能和反应API,可与RestTemplate
流畅的API 相媲美,并且在基于WebFlux基础设施的非阻塞和流媒体场景中表现优异; 在5.0中,AsyncRestTemplate
不赞成使用WebClient
。
Kotlin的支持
- 使用Kotlin 1.1.50或更高版本时,使用Null安全API。
- 支持带有可选参数和默认值的Kotlin不可变类。
- 功能bean定义Kotlin DSL。
- 用于WebFlux的功能路由Kotlin DSL。
- 利用Kotlin reified类型参数来避免
Class
在各种API(如RestTemplate
WebFlux API)中明确指定用于序列化/反序列化。 - 对
@Autowired
/@Inject
和@RequestParam
/@RequestHeader
/ etc注释的Kotlin零安全支持,以确定是否需要注入点或处理程序方法参数。 ScriptTemplateView
Spring MVC和Spring WebFlux都支持Kotlin脚本。- 类似于数组的setter添加到
Model
,ModelMap
和Environment
。 - 支持带有可选参数的Kotlin自动装配构造函数。
- Kotlin反射用于确定界面方法参数。
测试改进
- 在Spring TestContext Framework中完全支持JUnit 5的Jupiter编程和扩展模型。
SpringExtension
:来自JUnit Jupiter的多个扩展API的实现,它为Spring TestContext Framework的现有功能集提供完全支持。此支持通过@ExtendWith(SpringExtension.class)
。@SpringJUnitConfig
:一个组合的注释,它结合@ExtendWith(SpringExtension.class)
了JUnit Jupiter和@ContextConfiguration
Spring TestContext Framework。@SpringJUnitWebConfig
:一个组合的注释,它结合@ExtendWith(SpringExtension.class)
了JUnit Jupiter@ContextConfiguration
和@WebAppConfiguration
Spring TestContext Framework。@EnabledIf
:表示如果提供的SpEL表达式或属性占位符求值,则启用带注释的测试类或测试方法true
。@DisabledIf
:表示如果提供的SpEL表达式或属性占位符求值,则禁用带注释的测试类或测试方法true
。
- 支持Spring TestContext Framework中的并行测试执行。
- Spring TestContext Framework中测试执行回调之前和之后的新增功能,通过
SpringRunner
(但不是通过JUnit 4规则)支持TestNG,JUnit 5和JUnit 4 。- API和API 中的新增
beforeTestExecution()
和afterTestExecution()
回调。TestExecutionListener
TestContextManager
- API和API 中的新增
MockHttpServletRequest
现在有getContentAsByteArray()
和getContentAsString()
访问内容的方法(即请求体)。- 如果在模拟请求中设置了字符编码,则Spring MVC Test中的
print()
和log()
方法现在会打印请求主体。 - Spring MVC Test中的
redirectedUrl()
和forwardedUrl()
方法现在支持具有可变扩展的URI模板。 - XMLUnit支持升级到2.3。
spring 5.x(1)-----Spring Framework 5.x中的新功能相关推荐
- Spring Framework 4.2 中的新功能和增强功能
至今为止,Spring Framework 的最新版本为 4.2.1.RELEASE. 那么 Spring Framework 4.2 中的又有哪些新功能和增强功能呢? 核心容器改进 如 @bean ...
- Entity Framework 4.3 中的新特性
原文地址:http://www.cnblogs.com/supercpp/archive/2012/02/20/2354751.html EF4.3于2月9号正式发布了,微软的EF小组最近一年开始发力 ...
- VS Code Java 7 月更新:Lombok 支持重大提升, Spring 增强新功能!
来源:玩转VS Code 作者:Nick Zhu 排版:Rani Sun 大家好,欢迎来到 Visual Studio Code Java 的 7 月更新.我们带来了关于 Lombok 支持的更新以及 ...
- 在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
[原文地址]Using Repository and Unit of Work patterns with Entity Framework 4.0 [原文发表日期] 16 June 09 04:0 ...
- spring boot组件_Spring Boot Framework的关键组件和内部
spring boot组件 In my previous post "Introduction to Spring Boot", we have discussed about S ...
- 2.15 Spring Framework 5.x 之ApplicationContext附加功能
1.15 附加功能ApplicationContext 正如章节介绍中所讨论的,该org.springframework.beans.factory 包提供了管理和操作bean的基本功能,包括以编程方 ...
- Spring指南之使用Spring缓存数据(Spring Framework官方文档之缓存抽象详解)
1.请参见官方文档Spring指南之使用 Spring 缓存数据 2.请参见Spring官方文档之缓存抽象 3.参见github代码 文章目录 一.简介 二.你将创造什么(What You Will ...
- spring vertx_如何在Spring设置Vertx
spring vertx by Rick Lee 李瑞克(Rick Lee) 如何在Spring设置Vertx (How to set up Vertx in Spring) Spring is pr ...
- Spring MVC集成Spring Data Reids和Spring Session实现Session共享
说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入. ...
最新文章
- c语言求两者之间最小数,C语言课件第2章基本数据类型.ppt
- It is not allowed to rename or repackage the original archive “sapjco3.jar“
- 配置虚拟目录的方式(Linux下/windows下)
- C语言多项式乘法模拟,急!!!!c语言:求n次多项式的加法和乘法
- android t类型参数,数据绑定Android – 类型参数T具有不兼容的上限:ViewDataBinding和MainActivity...
- java属性错误_在java中读取属性文件时发生文件未找到错误
- python代替按键精灵 游戏内失灵_python游戏脚本之调用按键精灵插件模拟输入(二)...
- 磁带非但没被淘汰,容量还比硬盘大了???
- SpaceX的代码开源了,来看看火箭技术的代码.Spacex Rest API设计很有参考价值
- 一个Logo道出了DELL EMC存储的追求与梦想
- 倍控G30-J4125工控机开箱
- python二维数组去重复_python 去除二维数组/二维列表中的重复行方法
- XCUIApplication API
- html css3 纸张,CSS3 设计巧妙的纸张褶起动效
- 零序电流 Zero-sequence curren Residual Current Circuit Breaker
- 免费白嫖 OCR 工具(专业版+简易版) 你适合哪个呢?
- CSS学习(五)—— 背景与渐变、2D与3D的转换
- 华为无线路由器信道怎么测试软件,家里人太多网速抢不赢?华为AX3Pro路由上手评测...
- 电脑出现网络未识别情况 处理方法
- 创业故事之 周鸿祎谈创业