Spring Framework 5.2.1 发布

Spring Framework 5.2.2 发布了,本次更新包含上百项新特性和 bug
修复,摘取部分如下:

新特性

  • 支持 WebFlux
    编解码器中对输入流处理的限制 #23884
  • 竞争条件会影响 AbstractJaxb2HttpMessageConverter 中的性能
    – JAXBContext
    creation #23879
  • 添加 RSocketRequester resolveAndAwaitOrNull
    扩展 #www.9778.com,23874
  • 在注释中支持单向 @AliasFor
    属性映射 #23834
  • 允许在 BeanDefinitionBuilder
    上设置主标志 #23794
  • 引入 requestResultMatchers 中的
    sessionAttributeDoesNotExist #23756
  • EventPublishingTestExecutionListener 不包含在 JUnit 4 和 TestNG
    基类中 #23748
  • 优化 DataSourceUtils.resetConnectionAfterTransaction(…) 中的 
    Connection.setReadOnly(false) #23747
  • ResponseStatusException
    的处理也包括响应头的设置 #23741
  • 修复 OkHttp3ClientHttpRequestFactory
    关闭流程 #Spring Framework 5.2.1 发布。23628
  • Redis url 中的主机详细信息在末尾引起多余的括号
  • RBuckets.get() 方法不适用于自定义编解码器
  • RLock.unlock() 方法永远挂起
  • RStream.trim 方法引发异常
  • Spring Data pubsub 侦听器执行多次
  • Redis 命令处理程序消耗 100% 的 CPU 资源

一个新的spring-messaging模块添加了对STOMP的支持,这是在应用程序中使用的WebSocket子协议,以及一个用于从WebSocket客户端路由和处理STOMP消息的注释编程模型。因此,@controller现在可以同时包含@RequestMapping和@MessageMapping方法,用于处理来自网络连接的客户机的HTTP请求和消息。新的spring-messaging模块还包含了以前从Spring
Integration项目中提取的关键抽象,比如 Message, MessageChannel, MessageHandler等,作为基于消息应用程序的基础。

新特性

Bug 修复

  • 在 registrar
    中重新排序日期格式转换器 #23893
  • 使用合格的注入点重新访问 @Configuration(proxyBeanMethods =
    false) #23887
  • 修复 AbstractNamedValueMethodArgumentResolver 中的
    NPE #23882
  • WebClient onStatus
    顺序已更改 #23880
  • 删除 XpathRequestMatchers
    中未使用的类型参数声明 #23860
  • ……

更多内容见更新说明。

(文/开源中国)    

更新说明及下载地址

核心容器有几个总体改进:

(文/开源中国)    

Spring Framework 5.2.1 发布了,更新内容如下:

Redisson 3.11.5 发布了,Redisson 是架设在 Redis 基础上的一个 Java
驻内存数据网格 (In-Memory Data Grid) 。

2、如果您使用Spring的元注释,您现在可以开发自定义的注释,该注释可以从源注释中公开特定的属性。

  • 连接到 RSocket
    时为空指针 #24088
  • 回归:不再识别在超类中声明的 @Inherited
    注释 #24077
  • RSocketRequester
    允许多次指定数据 #24073
  • 修改 AbstractBeanDefinition
    等于实现 #24048
  • SqlRowSet 访问器方法应标记为
    @Nullable #24042
  • 对 SynthesizedMergedAnnotationInvocationHandler 中的注释的 .value()
    的不安全调用会阻止向后兼容的注释添加 #24029
  • ……

修复

所有已弃用的包,以及许多弃用的类和方法在4.0版本中被删除。如果您正在从以前的Spring版本升级,那么您应该确保您已经修复了对过时的api的不支持的调用。

特性

1、几乎所有的注解都可用在spring-test模块中(如:@ContextConfiguration, @WebAppConfiguration, @ContextHierarchy, @ActiveProfiles等。),现在可以作为元注解来创建定制的自定义复合注释,并在测试中减少重复配置。

Bug 修复

  • Automatic-Module-Name 条目已添加到清单文件
  • 已将 subscriptionOnElements 方法添加到 RBlockingQueue 对象
  • 添加到 RBlockingDeque 对象的 subscribeOnFirstElements 和
    subscribeOnLastElements 方法
  • 添加到 RScoredSortedSet 对象的 subscribeOnFirstElements 和
    subscribeOnLastElements 方法
  • 支持 Spring Data Redis 2.2.x
  • 向 RLiveObjectService 对象添加了批处理的 persist 方法
  • Kryo5Codec 实现

Spring
Framework 4.0提供了对几个Java
8特性的支持。您可以使用Spring的回调接口来使用lambda表达式和方法引用。对于java.time (JSR-310)有最好的支持,一些现有的注释已经被改造为@Repeatable。您还可以使用Java 8的参数名称发现(基于-parameters编译器标志)作为启用调试信息的另一种选择。

详情见更新说明:

更新内容如下:

3.1改进了入门经验

  • 提供自定义编解码器的默认编解码器配置回调 #24118
  • 添加 protobuf
    MessageConverter #24087
  • 完善 Spring WebSocket 中的 Throwable
    处理 #24075
  • 改进 MockMultipartHttpServletRequest
    中零件内容类型的确定 #24074
  • ExtendedBeanInfo.PropertyDescriptorComparator 中的 String.getBytes()
    缓存结果 #24072
  • 使用 String.isEmpty()
    代替 String.equals(“”) #24052
  • IOException 与 WebFlux 在 Jetty
    上“待处理/未就绪时关闭” #24050
  • 避免在 StringUtils.replace
    中分配子字符串 #24023
  • 使用 @MessageMapping 方法签名来约束 RSocket
    交互模型 #23999
  • ……

Redisson 在基于 NIO 的 Netty 框架上,充分利用了 Redis
键值数据库提供的一系列优势,在 Java
实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

要了解更多细节,包括更全面的介绍,请参阅第25章“WebSocket支持”一节。

升级到Spring
4.0的迁移指南可以在Spring框架的GitHub Wiki上获得。

从Spring
Framework 4.0开始,可以使用Groovy
DSL来定义外部bean配置。在思想上是与 XML
bean定义相似的但是允许使用更简洁的语法。使用Groovy允许你在bootstrap 代码中直接嵌入bean定义,例如:

版本4.0是Spring框架的最新主要版本,也是第一个完全支持Java
8特性的版本,您仍然可以使用Spring的旧版本的Java,然而,现在已经将最低要求提高到Java
SE 6,我们还利用了一个主要版本的机会来删除许多已弃用的类和方法。

3.3
Java 8(以及6和7)

www.9778.com 1如果您是WebSphere
7用户,请确保安装JPA 2.0功能包。在WebLogic
10.3.4或更高版本中,安装与它一起的JPA
2.0补丁。这使得这两种服务器都可以转换为Spring 4兼容的部署环境。

2、添加了AsyncRestTemplate类,在开发REST客户端时允许非阻塞异步支持。

请注意,Hibernate
4.3是JPA 2.1的提供者,因此它只支持Spring Framework 4.0。 Hibernate Validator 5.0作为Bean Validation
1.1的提供者也是如此。这两个版本都没有得到Spring框架3.2的官方支持。

3.4
Java EE 6 和 7

def reader = new GroovyBeanDefinitionReader(myApplicationContext)
reader.beans {
    dataSource(BasicDataSource) {
        driverClassName = "org.hsqldb.jdbcDriver"
        url = "jdbc:hsqldb:mem:grailsDB"
        username = "sa"
        password = ""
        settings = [mynew:"setting"]
    }
    sessionFactory(SessionFactory) {
        dataSource = dataSource
    }
    myService(MyService) {
        nestedBean = { AnotherBean bean ->
            dataSource = dataSource
        }
    }
}

4、在Spring
4.0中,org.springframework.mock.web包现在是基于Servlet 3.0
API的。此外,还有几个Servlet API模拟(例如:MockHttpServletRequest, MockServletContextt等)更新了一些小的改进和改进的可配置性。

一个新的spring
websocket模块为web应用程序中的客户端和服务器之间的基于web的双向通信提供了全面的支持。它兼容jsr-356,Java
WebSocket
API,并且提供了基于sockjs的回退选项(即WebSocket仿真),用于在不支持WebSocket协议的浏览器中使用(例如Internet
Explorer小于10的版本)。

新的Spring。io网站提供了一系列的“入门”指南,帮助你学习Spring。你可以在第一章中读到更多关于指南的内容,在本文档中开始使用Spring部分。这个新网站还提供了一个全面的概述,介绍了许多在Spring结构下发布的项目。

如果您是一个Maven用户,您可能也会对现在发布的每个Spring框架发行版的POM文件感兴趣。

3、Spring现在在开发Spring
MVC应用程序时提供了全面的时区支持。

Spring仍然与旧版本的Java和JDK兼容:具体地说,Java
SE 6(特别地,在2010年1月发布的最低的JDK
6更新到18)上面仍然是完全支持的,但是,对基于Spring
4开发的项目,我们建议使用Java 7或8版本。

3.2删除已弃用的包和方法

5、对于使用基于java的配置的开发人员,已经介绍了@description注释。

3、在spring核心模块中引入了一个新的SocketUtils类,它允许您在本地主机上扫描免费的TCP和UDP服务器端口。这一功能并不是特定于测试的,但在编写需要使用套接字的集成测试时,可以证明非常有用,例如启动内存中的SMTP服务器、FTP服务器、Servlet容器等的测试。

注意,可选的第三方依赖关系已经提高到2011/2011年的最低限度(也就是说,Spring
4通常只支持在2010年末或之后发布的版本);值得注意的是,Hibernate
3.6+、EhCache 2.1+、Quartz 1.8+、Groovy 1.8+和joda-time 2.0+。Spring
4需要最新的Hibernate Validator 4.3+,并且对Jackson的支持已经集中于2.0+(对Jackson1.8/1.9的支持,当时是Spring
3.2所拥有的,现在已经被弃用了)。

4、@Lazy 注释现在可以在注入点上使用,也可以在@bean定义上使用。

6、通过@Conditional注释添加了有条件过滤bean的通用模型。这类似于@Profile支持但是允许用户自定义编程方式。

1、Spring现在在注入bean时将泛型类型作为限定符的形式。例如,如果您使用的是Spring Data Repository,那么您现在可以轻松地注入特定的实现:@Autowired Repository<Customer>
customerRepository.

3.7常规Web改进

Java
EE版本6或更高版本现在被认为是使用Spring框架4的最基本的标准,JPA
2.0和Servlet 3.0规范具有特殊的相关性。为了与Google App
Engine和旧的应用程序服务器保持兼容,可以将Spring 4应用程序部署到Servlet
2.5环境中。然而,强烈建议使用Servlet
3.0+,并且在Spring的测试中,对于开发环境中的测试设置来说,这是一个首要的条件。

 

7、CGLIB-based代理类不再需要一个默认的构造函数。支持通过objenesis库提供,该库被重新打包,并作为Spring框架的一部分分发。有了这个策略,不再有任何构造函数被用于代理实例的调用。

8、现在在整个框架中都有管理的时区支持,例如在LocaleContext中

 

3、当这些bean被自动装配到列表和数组时,它们就可以被排序了。都支持@Order注解和Ordered接口。

要了解更多信息,请参阅 GroovyBeanDefinitionReader javadocs.

往长远看,Spring
Framework 4.0支持Java EE 7级别的适用规范:特别是JMS 2.0、JTA 1.2、JPA
2.1、Bean验证1.1和jsr-236并发实用工具。与往常一样,这种支持侧重于对这些规范的单独使用,例如在Tomcat或独立环境中。但是,当将Spring应用程序部署到Java
EE 7服务器时,它的工作方式也同样出色。

1、您可以使用新的@restcontroller注释来使用Spring
MVC应用程序,从而消除了将@responsebody添加到每个@requestmapping方法的需要。

3.9测试改进

3.8
WebSocket,SockJS和STOMP Messaging

对于所有的变动,请查看API差异报告。

 

3.6核心容器的改进

Spring框架于2004年首次发布,此后出现了重大的重大修改:Spring
2.0提供了XML名称空间和AspectJ支持;Spring 2.5采用了注解驱动的配置,Spring
3.0在框架代码库中引入了强大的Java
5+基础,以及诸如基于Java的@configuration模型之类的特性。

3.5
Groovy Bean定义DSL

除了在spring-test模块中对已废弃的代码进行整理之外,Spring
Framework
4.0还引入了一些用于单元和集成测试的新特性。

2、现在,通过实现一个定制的activepro文件解析器并通过@activeprofiles的解析器属性来注册它,可以通过编程方式解决活动bean定义概要文件。

部署到Servlet
2.5服务器仍然是一个选择,但Spring框架4.0现在主要关注于Servlet
3.0+环境。如果您正在使用Spring MVC测试框架,您将需要确保Servlet
3.0兼容JAR在您的测试类路径中。

除了后来提到的WebSocket支持之外,对Spring的Web模块进行了以下的全面改进: