Spring5

时间:2020-02-23 14:35:43  来源:igfitidea点击:

Spring 5于2016年底发布。
Spring5对Spring框架进行了大规模更新。
Spring 4于2013年发布,因此每个人都期望对框架进行重大改革。
我很高兴看到Spring框架中的新功能。

Spring 5功能

Spring 5的功能可以大致分为以下几类:

  • Java Baseline支持
  • 核心API增强功能
  • Spring Web MVC增强功能
  • SpringWebFlux
  • Kotlin支持的功能编程
  • 测试改进
  • 不建议使用的支持和删除的软件包

Java Baseline支持

  • Spring 5在Java 8上运行,因此Spring代码可以利用Lambda表达式来提高代码的可读性。

  • Spring 5还支持Java 9,因此我们也可以在基于模块的体系结构上创建应用程序。

  • Spring 5支持Java EE 7,并且还与Java EE 8兼容。
    因此,我们可以在应用程序中使用Servlet 4.0,Bean Validation 2.0和JPA 2.2。
    我们还可以使用其旧版本,例如Servlet 3.1,Bean Validation 1.1,JPA 2.1。

  • Spring 5应用程序首选的服务器版本是Tomcat 8.5 +,Jetty 9.4+和WildFly 10+。

我真的很喜欢那个Spring5试图赶上不同技术的最新版本。

核心API增强功能

  • 程序包级别的非null API声明。
    可空参数,字段和返回值用@Nullable注释显式注释。

  • 文件操作是通过NIO 2流(即没有FileInput/Output流)执行的。
    对于基于文件的应用程序来说,这是一个很大的增强和性能提升。

  • Spring Framework 5.0带有自己的Commons Logging桥;使用spring-jcl代替标准的Commons Logging。

  • 支持通过索引文件" META-INF/spring.components"而不是类路径扫描来提供spring组件信息。
    如果您有一个很大的spring项目和许多spring组件,这将大大缩短启动时间。
    对于开发人员来说也将更好,因为我们可以直接查看指定的文件以找出应用程序的入口点,而不是搜索整个类路径文件。

Spring Web MVC增强功能

Spring MVC模块在使用最新的Java EE技术方面进行了重大改进。
一些主要的增强功能包括:

  • 在Spring提供的Filter实现中完全支持Servlet 3.1签名。

  • Spring MVC控制器方法中对Servlet 4.0PushBuilder参数的支持。

  • MaxUploadSizeExceededException用于常见服务器上的Servlet 3.0多部分解析。

  • 通过MediaTypeFactory委托统一支持常见的媒体类型。

  • 使用Kotlin,Lombok,@ ConstructorProperties与不可变对象进行数据绑定。

  • 支持JSON Binding API,以替代Hymanson和GSON。

  • 支持Reactor 3.1 Flux和Mono以及RxJava 1.3和2.1作为Spring MVC控制器方法的返回值。

  • 支持ResponseStatusException作为@ ResponseStatus`的编程替代。

SpringWebFlux

Spring WebFlux是新模块,它是" spring-webmvc"模块的替代产品,并基于反应框架构建。
该模块用于创建基于事件循环执行模型的完全异步且非阻塞的应用程序。

  • Spring核心中的反应性基础结构,例如用于编码和解码对象流的Encoder和Decoder。

  • @Controller样式,基于注释的编程模型,类似于Spring MVC,但在WebFlux中受支持,并在反应堆上运行。

  • 新的WebClient,具有用于HTTP调用的功能性和响应性API,与RestTemplate相当,但通过流畅的API,并且在基于WebFlux基础结构的非阻塞和流传输方案中也很出色。

Kotlin支持的功能编程

Spring 5现在也支持Kotlin编程。
正如Java也在向函数式编程迈进一样,这是向支持函数式编程迈出的重要一步。

  • 支持Null-Safe API

  • 支持带有可选参数和默认值的Kotlin不可变类。

  • 利用Kotlin的类型化参数避免在各种API(例如RestTemplate或者WebFlux API)中明确指定用于序列化/反序列化的Class。

  • 支持带有可选参数的Kotlin自动装配构造函数。

  • Kotlin对@ Autowired/@ Inject和@ RequestParam/@ RequestHeader/etc注释的安全性支持。

测试改进

  • 支持JUnit 5
  • 在Spring TestContext Framework中支持并行测试执行

不建议使用的支持和删除的软件包

  • 从spring-aspects模块中删除了beans.factory.access,jdbc.support.nativejdbc,mock.staticmock软件包。

  • 删除的软件包web.view.tiles2orm.hibernate3/hibernate4被删除了。
    这意味着,如果您打算使用Spring 5,则还必须使用Hibernate 5。

  • 不再支持旧技术Portlet,Velocity,JasperReports,XMLBeans,JDO和Guava。
    如果您正在使用其中任何一种,那么或者迁移到其他技术,或者继续使用Spring 4。