Spring5的新特性有哪些?
一. Spring5框架新特性概述
Spring5最令人兴奋的消息就是它提出了响应式的编程模型(Reactive Programming)。Spring5 框架同时兼容 Java8 和 JDK 9。提供了一种颠覆于传统WEB开发方式的编程风格。对于Spring5的升级,给大家罗列了以下方面:
基于JDK8,兼容于JDK9。
对Kotlin支持。
响应式的编程风格。
对函数式WEB框架的支持。
对Junit5的支持。
在这里文哥重点对响应式的编程风格和函数式的WEB框架支持给大家做一下介绍:
响应式的编程风格
响应式编程是Spring Framework 5.0最重要的更新之一。专注于构建对事件做出响应的WEB应用程序。Java8本身没有对响应式编程风格进行支持,但是一些其他的框架提供了对响应是编程风格的支持。文哥在这里给大家罗列一下:
Reactive Streams:尝试定义与语言无关的响应性API。
Reactor:Spring Pivotal团队提供的响应式编程的Java实现。
Spring WebFlux:启用基于响应式编程的Web应用程序的开发。 提供类似于Spring MVC的编程模型。
函数式Web框架
除了响应式功能之外,Spring5 还提供了一个函数式Web框架。它提供了使用函数式编程风格来定义endpoints的功能。 该框架引入了两个基本组件:HandlerFunction 和 RouterFunction。HandlerFunction 表示处理接收到的请求并生成响应的函数。 RouterFunction 替代了 @RequestMapping 注解。它用于将接收到的请求路由到处理函数。对于响应式编程风格和函数式WEB框架的支持,由于我们没有给小伙伴们介绍SpringMVC的知识,所以这部分内容我们放在SpringMVC系列文章中给大家介绍。接下来文哥给大家介绍Spring5中的其他新特性。
二. Spring5框架新特性
Spring5整合日志框架
Spring5本身提供了对日志封装的解决方案,官方建议我们使用Log4j2。接下来文哥就给大家演示Spring5对于日志框架的整合。
第一步:引入相关的依赖 org.apache.logging.log4j log4j-api 2.11.2
org.apache.logging.log4j log4j-core 2.11.2 org.apache.logging.log4j log4j-slf4j-impl 2.11.2 org.slf4j slf4j-api 1.7.30 第二步:创建日志配置文件 我们在项目里面创建日志文件,文件的名称叫log4j2.xml 第三步:测试日志整合是否生效 我们随便编写并运行一个测试类,查看控制台效果: ![](https://storage.qfedu.com/twxt/1681104301967.image.png)
到这里我们Spring5整合Log4j2日志框架就成功了。
2. @Nullable注解
@Nullable注解是Spring5框架提供出来的一个新的注解。可以使用在方法上面,也可以应用到属性和参数上面,应用到方法上面表示方法返回可以为空,应用到属性上面表示属性值可以为空,应用到参数上面表示参数值可以为空。接下来文哥给大家演示一下注解的使用:
(1) 应用到方法上面。
我们可以查阅Spring的官方源码,在源码中关于@Nullable注解的使用地方有很多,在这里我们看看ApplicationContext的源码:
@Nullable注解修饰的getParent方法,说明这个方法的返回值是可以为NULL的。
(2) 应用到方法形式参数里面。
我们还是翻阅Spring的官方源码,这次我们查看AnnotationConfigApplicationContext类里面有一个注册bean的方法:
这意味着@Nullable注解修饰的beanName参数,外界在传值的时候可以传入为NULL。
(3) 应用到属性上面
我们还是翻阅Spring的官方源码,现在我们查看ClassPathXmlApplicationContext类。
GenericApplicationContext 函数式风格的容器
在Spring5里面,还支持使用函数式的风格创建对象,并将对象交给容器管理,现在文哥给大家简单演示一下:
@Test
public void testGenericApplicationContext() {
//1 创建 GenericApplicationContext 对象
GenericApplicationContext context = new GenericApplicationContext();
//2 调用 context 的方法对象注册
context.refresh();
context.registerBean("account1", Account.class,() -> new Account(1002,"kobe",500.0));
//3 获取在 spring 注册的对象
Account user = (Account) context.getBean("account1");
System.out.println(user);
}
猜你喜欢LIKE
相关推荐HOT
更多>>servlet底层原理是什么?
1、ServletAPI核心类与接口2、Servlet类处理请求的流程创建servlet类的步骤:创建一个命名为TestServlet继承javax.servlet.http.HttpServlet类详情>>
2023-05-30 10:41:22多线程的优势与劣势分别是什么?
多线程是指在同一个程序中,同时运行多个线程,每个线程都可以独立执行不同的任务,相互之间不会干扰。多线程的优势和劣势如下:优势:提高程序...详情>>
2023-05-30 10:32:12设计模式之生产者与消费者的代码实现
本文主要讲述生产者和消费者模式,文中会使用通俗易懂的案例,使你更好地学习本章知识点并理解原理,做到有道无术。什么是生产者和消费者模式生...详情>>
2023-05-30 10:25:46从零开始学Java之interface接口
一.接口简介简介Java中的接口(interface)类似于是一种特殊的抽象类,它也是众多抽象方法的集合。接口的定义方式、组成部分都与抽象类相似,却比...详情>>
2023-05-29 11:26:17热门推荐
如何进行mysql数据备份?
沸什么是servlet的生命周期?servlet请求处理流程是怎样的?
热servlet底层原理是什么?
热怎样编写java程序?
新多线程的优势与劣势分别是什么?
ssm框架的作用与原理是什么?
设计模式之生产者与消费者的代码实现
接口和抽象类有什么区别?4个方面对比
从零开始学Java之interface接口
从零开始学Java之Java中的内部类是怎么回事?
一分钟带你了解MySQL——基础与介绍
在java中,super关键字怎样使用
什么是事件流以及事件流的传播机制 ?
弹性盒有哪些属性是在父元素身上?