4.2 Spring 5.1新特性
4.2.1 核心修改
Spring 5.1核心修改如下。
• 在类路径和模块路径上对JDK 11的无警告支持。
• 支持Graal原生图像约束。
• Reactor Core升级到Reactor Core 3.2和Reactor Netty升级到Reactor Netty 0.8(Reactor Californium)。
• ASM升级到ASM 7.0和CGLIB升级到CGLIB 3.2.8。
• 在FileSystemResource中提供NIO 2.0路径支持(取代PathResource)。
• 核心类型和注释解析的性能改进。
• 可以通过标准的Commons Logging检测Spring的JCL桥。
4.2.2 核心容器更新
Spring 5.1核心容器更新如下。
• 支持“@Profile”条件中的逻辑和/或表达式。
• 嵌套配置类的一致性检测。
• 优化Kotlin bean的DSL,同一类型的多个bean的唯一隐式bean名称。
• 在BeanFactory API中统一地不暴露任何空的bean。
• 通过BeanFactory API进行编程式的ObjectProvider检索。
• ObjectProvider提供可迭代/流式访问。
• 支持在单个构造函数场景中的空集合/映射/数组注入。
4.2.3 Web修改
Spring 5.1中的Web修改如下。
• 在接口上也可以检测到控制器参数注释。
• 支持在UriComponentsBuilder中使用更严格的URI变量编码。
• spring-web模块提供FormContentFilter拦截HTTP中的PUT、PATCH和DELETE请求。
4.2.4 Spring Web MVC更新
Spring 5.1中Spring Web MVC更新如下。
• 改进后提供更加人性化和紧凑的DEBUG和TRACE日志,通过DispatcherServlet中的enableLoggingRequestDetails属性控制潜在敏感数据的DEBUG记录。
• 更新了Web区域表示。CookieLocaleResolver将发送符合RFC6265标准时区的cookie。
• 对缺少请求头、cookie和路径等异常定制了MVC异常,允许对异常进行区分和对状态代码进行区分。
• 通过ForwardedHeaderFilter集中处理“转发”类型头部。
• 除了GZip之外,还支持Brotli预编码静态资源。
4.2.5 Spring WebFlux更新
Spring WebFlux更新如下。
• 使用Reactor Netty 0.8运行时服务器端支持HTTP/2。
• 改进后更加人性化和紧凑的DEBUG和TRACE日志。
• HTTP请求和WebSocket会话的相关日志记录。
• 控制潜在敏感数据的DEBUG记录。通过CodecConfigurer的defaultCodecs属性控制。
• 会话cookie已具有SameSite = Lax功能,可以防止CSRF攻击。
• 支持Protobuf序列化,包括消息流。
• 支持Jetty响应式HTTP客户端的WebClient连接器。
• 支持WebSocketSession属性设置。
• 改进有关反应式WebSocket API文档。
4.2.6 Spring Messaging更新
Spring Messaging更新如下。
• 在“@MessageMapping”方法中支持响应式客户端,并支持Reactor和RxJava返回值的开箱即用。
• 提供选项以保留STOMP代理的消息发布顺序。
• “@SendTo”和“@SendToUser”都可以用于控制器方法。
• 改进了有关处理消息和消息订阅的文档。
4.2.7 Spring ORM更新
Spring ORM更新如下。
• 支持Hibernate ORM 5.3:Bean容器与Hibernate的新SPI集成。
• LocalSessionFactoryBean和HibernateTransactionManager支持JPA交互,在同一事务中允许原生Hibernate和JPA共同访问。
• 只读事务不再在内存中保留Hibernate实体快照。
4.2.8 测试更新
• WebTestClient中的Hamcrest和XML断言更新。
• 可以使用固定的WebSession配置MockServerWebExchange。