Spring 5企业级开发实战
上QQ阅读APP看书,第一时间看更新

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。