百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

spring5.0新特性,掌握这些功能写代码不香吗?

lipiwang 2024-11-21 17:40 4 浏览 0 评论

Spring 5于2017年9月发布了通用版本,它是自2013年12月以来第一 个主要的Spring版本。它提供了一些人们期待已久的改进,还采用了一种全新的编程范例,以反应式原则为基础。

这个版本是很长时间以来最令人激动的版本。Spring 5兼容JavaTM8 和JDK 9,它集成了反应式流,以方便后续提供一种颠覆性方法来实现 端点和Web应用程序开发。

当然,反应式编程不仅是此版本的主题,还是令许多程序员激动不 已的重大特性。譬如Spring 5很好地满足了针对负载波动进行无缝扩展的容灾和响应式服务的需求。

以下将介绍spring5带来的特性和改变。它将包含以下关键内容:

  • JDK 基线和库更新、支持
  • 使用JDK8和JDK9新特性
  • 反应式编程模型
  • 含 Kotlin 在内的函数式编程
  • 测试改进和提升
  • spring核心迭代和一般性修订
  • 中止支持

一、JDK 基线和库更新、支持

要构建和运行 Spring5 应用程序,我们至少需要 J2EE7 和 JDK8。以前的 JDK 和 JavaEE 版本将不再支持。而目前比较JDK稳定的8版本将是最基础的Java开发环境。所以J2EE7包含的这些内容版本不容小觑:

  • Servlet 3.1
  • JMS 2.0
  • JPA 2.1
  • JAX-RS 2.0
  • Bean Validation 1.1

各类服务器的最低使用版本:

  • Tomcat 8.5+
  • Jetty 9.4+
  • WildFly 10+
  • Netty 4.1+
  • Undertow 1.4+

同样Spring Framework 5.0目前支持以下升级库的版本 :

  • Jackson 2.6+
  • EhCache 2.10+ / 3.0 GA
  • Hibernate 5.0+
  • JDBC 4.0+
  • XmlUnit 2.x+
  • OkHttp 3.x+
  • Netty 4.1+


二、使用JDK8和JDK9新特性

Spring5 的基准版本为8,因此它使用了 Java8 和9的许多新特性。例如:

A、Spring 接口中的默认方法(JDK9);

B、基于 Java8 反射增强的内部代码改进(JDK8);

C、在框架代码中使用函数式编程 - lambda表达式 和 stream流(JDK8);

D、支持HTTP/2(JDK9)。以下将针对JDK版本内容解释说明。

HTTP/2方面的支持

HTTP/2提高了传输性能,减少了延迟并提高了应用程序的吞吐量从而提供了丰富的Web体验。Spring 5提供专门的HTTP/2特性支持(由Tomcat 9.0、Jetty 9.3 和Undertow 1.4提供)。


Lambda表达式注册Bean实例

传统注册bean使用XML配置或者javaConfig进行实例,但是这些在5.0后也有新方案,我们可以使用Lambda表达式进行bean的实例处理:

context.registerBean(TestBean.class, () -> new
TestBean(context.getBean(Test.class))
);


三、反应式编程模型

Spring 5 Framework 基于一种反应式基础而构建,而且是完全异步和非阻塞的。只需少量的线程,新的事件循环执行模型就可以垂直扩展。

该框架采用反应式流来提供在反应式组件中传播负压的机制。负压是一个确保来自多个生产者的数据不会让使用者不堪重负的概念。

Spring WebFlux 是 Spring 5 的反应式核心,它为开发人员提供了两种为 Spring Web 编程而设计的编程模型:一种基于注解的模型和 Functional Web Framework (WebFlux.fn)。

基于注解的模型是 Spring WebMVC 的现代替代方案,该模型基于反应式基础而构建,而 Functional Web Framework 是基于 @Controller 注解的编程模型的替代方案。这些模型都通过同一种反应式基础来运行,后者调整非阻塞 HTTP 来适应反应式流 API。


四、含 Kotlin 在内的函数式编程

Kotlin 是一种静态类型的JVM语言,它让代码具有表现力,简洁性和可读性。 Spring5.0 对 Kotlin 有很好的支持。


函数式编程

Spring5 还提供了一个函数式Web框架。它提供了使用函数式编程风格来定义端点的特性。 该框架引入了两个基本组件:HandlerFunction 和 RouterFunction。

HandlerFunction 表示处理接收到的请求并生成响应的函数。

RouterFunction 替代了 @RequestMapping 注解。它用于将接收到的请求路由到处理函数。如:

RouterFunction<String> route = route(GET("/hello-world"),request -> Response.ok().body(fromObject("Hello World")));

五、测试改进和提升

Spring Framework 5.0 完全支持 JUnit 5 Jupiter,所以可以使用 JUnit 5 来编写测试以及扩展。此外还提供了一个编程以及扩展模型,Jupiter 子项目提供了一个测试引擎来在 Spring 上运行基于 Jupiter 的测试。当然在5.0版本使用旧版的JUnit 4.0也是可以的。

class Demo {
    @Test
    public void should_get_message_and_data() {
        Result<String> result = new Result<>(1, "msg");
        Assertions.assertEquals(1, result.getCode());
        Assertions.assertEquals("msg", result.getMsg());
    }
}

在JDK8基础上使用函数式编程编程特性:

@Test
public void test_model() {
	assertrue(Stream.of(20,50,60).stream().mapToInt(i - > i).sum() >110,() ->">=100")
}

另外,Spring Framework 5 还提供了在 Spring TestContext Framework 中进行并行测试的扩展。

spring-test 也引入了支持 Spring WebFlux 的 WebTestClient ,为集成测试提供支持。WebTestClient使用模拟请求和响应 来避免耗尽服务器资源,并能直接绑定到WebFlux服务器的基础架构。它可绑定到真实的服务器,或者使用控制器或函数。


六、spring核心一般迭代

A、Spring 5改进了扫描和识别组件的方法,使大型项目的性能得到提 升。目前扫描是在编译时执行的,而且向 META-INF/spring.components 文件中的索引文件添加了组件坐标。该索引是通过一个为项目定义的特定于平台的应用程序构建任务来生成;

B、spring5添加了对@Nullable的支持,后者可用于指示可选的注入 点。使用者现在必须准备接受null值。此外,还可以使用此注解来标记 可以为null的参数、字段和返回值;

C 、Spring Logging 还提升了性能,自带开箱即用的 Commons Logging 桥接器


七、中止的支持

随着 Java、JavaEE 和其他一些框架基准版本的增加,SpringFramework5 取消了对几个框架的支持。例如:

  • Portlet
  • Velocity
  • JasperReports
  • XMLBeans
  • JDO
  • Guava
  • Hibernate3、4

一些包也被清理掉:

beans.factory.access、jdbc.support.nativejdbc、mock.staticmock(来自 spring-aspects模块)或web.view.tiles2M

我们在升级使用的时候也将要看到哪些不兼容,对号入座。

总结:

Spring5更新首要特性是新的反应式编程模型,这代表着对提供可无缝扩展、基于 Spring 的响应式服务的重大保障。随着大家对 Spring 5 的采用,开发人员有望看到反应式编程将会成为使用 Java 语言的 Web 和企业应用程序开发的未来发展道路。


码字不易,如果你也喜欢,不妨留下脚印~

相关推荐

想减少Windows 11内存占用?请取消固定Teams

如果你想要提高Windows11系统的运行速度,那么可以禁用某些默认启用的功能和设置。如果你的Windows11是安装在已经停止支持的设备或者内存容量不高的旧设备,那么应该立即限制或禁用固...

Windows查看端口占用、查看PID对应的进程、并终止进程

Windows下:查看端口占用netstat-ano|findstr"端口号"获取到pid查看PID对应的进程tasklist|findstr"进程ID"...

计算机组成原理(36): 分时之一——进程

建立一个虚拟机VM目标:给每个程序一个自己的虚拟机“VirtualMachine”,程序并不知道其他的虚拟机。1.1进程(Process)为了捕获正在运行的程序,我们创建一个称为“进程(Proce...

window系统如何停止端口被占用的进程(高手版)

如上图1,作为开发人员是不是经常遇到这个问题?(Webserverfailedtostart.Port9527wasalreadyinuse.)当然,如果在你知道确实有某个进程正占...

电脑的文件无法删除咋回事?你需要这款神兵利器

很多朋友用电脑的时候,都遇到过文件无法删除的情况。这往往是由于文件被某个软件、进程所调用所引发的——在Windows中,某个文件如果被使用,这个文件可能就没法进行删除、重命名之类的操作了。想要进一步操...

Windows日志分析(windows 日志文件)

1.Windows日志文件简介1.1Windows日志核心分类1.系统日志系统日志包含由Windows系统组件记录的事件,记录系统进程和设备驱动程序的活动。由它审核的系统事件包括启动失败的设备驱动程...

电脑软件崩溃、闪退不用慌!DJS Tech 教你几招轻松解决

当你正全神贯注用电脑处理重要文件、沉浸在精彩的游戏世界,或是观看喜欢的视频时,软件突然崩溃、闪退,那一刻的烦躁简直难以言喻。别着急,DJSTech作为深耕计算机领域多年的专业团队,为你带来一系列超...

微软Win11推进淘汰控制面板,时间服务器配置迁移至设置应用

IT之家5月29日消息,科技媒体Winaero昨日(5月28日)发布博文,报道称微软在Windows11系统中,继续推进“淘汰控制面板”进程,配置时间服务器地址选项迁移到设置应...

微软 PowerToys更新,可帮你找出 Win11上哪些进程正在占用该文件

IT之家11月3日消息,微软针对Windows11和Windows10的PowerToys已经更新到了最新的0.64.0版本,并上线了一个名为“文件锁匠FileLock...

Windows基础操作 认识任务管理器(windows任务管理器的使用)

Windows基础操作:认识任务管理器任务管理器(TaskManager)是Windows系统中一个功能强大的实用工具,它为用户提供了实时监控系统资源、管理正在运行的程序和服务的能力。掌握任务管理器...

windows——netstat过滤(终止进程)

windows——netstat过滤(终止进程)在Windows操作系统中,使用netstat命令可以查看网络连接的状态。要过滤特定协议或端口的连接,可以使用以下命令:查看所有连接:netstat-...

只要这么做 Windows Defender与第三方就能和平共存啦

无论大家是否喜欢WindowsDefender,伴随着Windows10的不断升级,它已经成为系统的底层必备组件之一。虽然我们有各种各样的方法去关闭它,换用顺手的第三方,但只要更新打补丁,噩梦就来...

Win10如何彻底关闭wsappx进程(win10 wsappx怎么关闭)

win10如何彻底关闭wsappx进程?wsappx进程是什么?wsappx进程是Windows10系统的一部分,这个进程是WindowsStore和微软通用应用程序平台(UWP)的依赖进程。...

Windows环境黑客入侵应急与排查(黑客入侵电脑原理)

1文件分析1.1临时目录排查黑客往往可能将病毒放在临时目录(tmp/temp),或者将病毒相关文件释放到临时目录,因此需要检查临时目录是否存在异常文件。假设系统盘在C盘,则通常情况下的临时目录如下...

Windows 11 24H2 KB5044384出现大面积安装失败、任务管理器0进程等问题

Windows11KB5044384更新由于出现大量错误而无法在Windows1124H2上安装、其中包括一个奇怪的错误,即由于0x800f0922、0x800736b3和0x8...

取消回复欢迎 发表评论: