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序列化,包括消息流。
    • WebClientJetty反应式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.accessBeanFactoryLocator机制)。
  • jdbc.support.nativejdbcNativeJdbcExtractor机制)。
  • mock.staticmockspring-aspects模块中删除。
    • 不再支持AnnotationDrivenStaticEntityMockingControl了。
  • 包裹web.view.tiles2orm.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 CharsetStandardCharsets增强功能。
  • JDK 9兼容性:
    • 避免尽可能在JDK 9中弃用的JDK API。
    • 通过构造函数进行一致的实例化(具有修订的异常处理)。
    • 防御使用反射核心JDK类。
  • 包级别的非null API声明:
    • 可明确注释的可为空的参数,字段和返回值@Nullable
    • 主要用于IntelliJ IDEA和Kotlin,还有Eclipse和FindBugs。
    • 一些Spring API不再容忍null值(例如in StringUtils)。
  • Resource抽象提供isFile了防御性getFile访问的指标。
    • readableChannelResource界面中还具有基于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签名支持。
  • 支持PushBuilderSpring 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支持FluxMono以及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,例如EncoderDecoder对对象的编码和解码流; DataBuffer抽象,例如使用Java ByteBuffer或Netty ByteBufReactiveAdapterRegistry用于控制器方法签名中的反应库的透明支持。
  • 反应性基础设施spring-web包括HttpMessageReaderHttpMessageWriter建立和委托EncoderDecoder; 服务器,HttpHandler带有适配器(非阻塞)运行时,如Servlet 3.1+容器,Netty和Undertow; WebFilterWebHandler以及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(如RestTemplateWebFlux API)中明确指定用于序列化/反序列化。
  • @Autowired@Inject@RequestParam@RequestHeader/ etc注释的Kotlin零安全支持,以确定是否需要注入点或处理程序方法参数。
  • ScriptTemplateViewSpring MVC和Spring WebFlux都支持Kotlin脚本。
  • 类似于数组的setter添加到ModelModelMapEnvironment
  • 支持带有可选参数的Kotlin自动装配构造函数。
  • Kotlin反射用于确定界面方法参数。

测试改进

  • 在Spring TestContext Framework中完全支持JUnit 5的Jupiter编程和扩展模型。

    • SpringExtension:来自JUnit Jupiter的多个扩展API的实现,它为Spring TestContext Framework的现有功能集提供完全支持。此支持通过@ExtendWith(SpringExtension.class)
    • @SpringJUnitConfig:一个组合的注释,它结合@ExtendWith(SpringExtension.class)了JUnit Jupiter和@ContextConfigurationSpring TestContext Framework。
    • @SpringJUnitWebConfig:一个组合的注释,它结合@ExtendWith(SpringExtension.class)了JUnit Jupiter @ContextConfiguration@WebAppConfigurationSpring 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()回调。TestExecutionListenerTestContextManager
  • 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中的新功能相关推荐

  1. Spring Framework 4.2 中的新功能和增强功能

    至今为止,Spring Framework 的最新版本为 4.2.1.RELEASE. 那么 Spring Framework 4.2 中的又有哪些新功能和增强功能呢? 核心容器改进 如 @bean ...

  2. Entity Framework 4.3 中的新特性

    原文地址:http://www.cnblogs.com/supercpp/archive/2012/02/20/2354751.html EF4.3于2月9号正式发布了,微软的EF小组最近一年开始发力 ...

  3. VS Code Java 7 月更新:Lombok 支持重大提升, Spring 增强新功能!

    来源:玩转VS Code 作者:Nick Zhu 排版:Rani Sun 大家好,欢迎来到 Visual Studio Code Java 的 7 月更新.我们带来了关于 Lombok 支持的更新以及 ...

  4. 在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 ...

  5. spring boot组件_Spring Boot Framework的关键组件和内部

    spring boot组件 In my previous post "Introduction to Spring Boot", we have discussed about S ...

  6. 2.15 Spring Framework 5.x 之ApplicationContext附加功能

    1.15 附加功能ApplicationContext 正如章节介绍中所讨论的,该org.springframework.beans.factory 包提供了管理和操作bean的基本功能,包括以编程方 ...

  7. Spring指南之使用Spring缓存数据(Spring Framework官方文档之缓存抽象详解)

    1.请参见官方文档Spring指南之使用 Spring 缓存数据 2.请参见Spring官方文档之缓存抽象 3.参见github代码 文章目录 一.简介 二.你将创造什么(What You Will ...

  8. spring vertx_如何在Spring设置Vertx

    spring vertx by Rick Lee 李瑞克(Rick Lee) 如何在Spring设置Vertx (How to set up Vertx in Spring) Spring is pr ...

  9. Spring MVC集成Spring Data Reids和Spring Session实现Session共享

    说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入. ...

最新文章

  1. c语言求两者之间最小数,C语言课件第2章基本数据类型.ppt
  2. It is not allowed to rename or repackage the original archive “sapjco3.jar“
  3. 配置虚拟目录的方式(Linux下/windows下)
  4. C语言多项式乘法模拟,急!!!!c语言:求n次多项式的加法和乘法
  5. android t类型参数,数据绑定Android – 类型参数T具有不兼容的上限:ViewDataBinding和MainActivity...
  6. java属性错误_在java中读取属性文件时发生文件未找到错误
  7. python代替按键精灵 游戏内失灵_python游戏脚本之调用按键精灵插件模拟输入(二)...
  8. 磁带非但没被淘汰,容量还比硬盘大了???
  9. SpaceX的代码开源了,来看看火箭技术的代码.Spacex Rest API设计很有参考价值
  10. 一个Logo道出了DELL EMC存储的追求与梦想
  11. 倍控G30-J4125工控机开箱
  12. python二维数组去重复_python 去除二维数组/二维列表中的重复行方法
  13. XCUIApplication API
  14. html css3 纸张,CSS3 设计巧妙的纸张褶起动效
  15. 零序电流 Zero-sequence curren Residual Current Circuit Breaker
  16. 免费白嫖 OCR 工具(专业版+简易版) 你适合哪个呢?
  17. CSS学习(五)—— 背景与渐变、2D与3D的转换
  18. 华为无线路由器信道怎么测试软件,家里人太多网速抢不赢?华为AX3Pro路由上手评测...
  19. 电脑出现网络未识别情况 处理方法
  20. 创业故事之 周鸿祎谈创业

热门文章

  1. vs 2015 C 语言,VS2015中C/C++代码分析
  2. 数据结构与算法分析(十)——母牛的故事
  3. VMware、Ubuntu和apt
  4. php基础知识填空题,比较基础的php面试题及答案填空题
  5. c/c++通用头文件
  6. Java面试之线程池详细
  7. Android MediaPlayer 音频倍速播放,调整播放速度
  8. java设计模式6.代理模式
  9. windows下用XShell远程ubuntu时连接失败
  10. 基础知识回顾——通用序列操作