Spring 5 笔记 - 新功能

news2024/9/22 15:49:14

1. Spring 5 框架新功能

  1. 整个Spring 5 框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除。
  2. Spring 5.0 框架自带了通用的日志封装

(1)Spring 5 已经移除 Log4jConfigListener,官方建议使用Log4j2如果要用之前的Log4j版本,需要将Spring 降到4或以下版本

Apache 的 Log4j2 是对Log4J 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:

  • 异常处理,在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。
  • 性能提升,log4j2 相较于log4j 和 logback 都具有明显的性能提升,有18倍性能提升,后面会有官方测试的数据。
  • 自动重载配置,参考了logback的设计,当然会提供自动刷新参数配置,最实用的就是我们在生产上可以动态的修改日志的级别而不需要重启应用
  • 无垃圾机制,log4j2 在大部分情况下,都可以使用其设计的一套无垃圾机制【对象重用、内存缓冲】,避免频繁的日志收集导致的 jvm gc。
  • 目前市面上最主流的日志门面就是SLF4J,虽然Log4j2 也是日志门面,因为它的日志实现功能非常强大,性能优越。所以大家一般还是将 Log4j2 看作是日志的实现Slf4j + Log4j2 应该是未来的大势所趋

(2)Spring 5 框架整合Log4j2

2. Spring 5 框架整合Log4j2

第一步:引入Jar包

Log4j2包下载地址:Apache Logging Services

点击上面链接下载zip文件后解压,从中挑出如下Jar包:

Slf4j 包下载地址:Central Repository: org/slf4j/slf4j-api

选择对应版本下载:

最终Spring 5 需要整合的4个日志的Jar包如下:

然后,引入到项目中:

第二步:创建log4j2.xml 配置文件

  • 注意这个配置文件的文件名称是固定的,不要用别的名字。

<?xml version="1.0" encoding="UTF-8" ?>

<!--日志级别以及优先级排序:OFF 》 FATAL 》 WARN 》 INFO 》 DEBUG 》 TRACE 》 ALL-->

<!--configuration 后面的status用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,可以看到log4j2内部的各种详细输出-->

<configuration status="INFO">

  <!--先定义所有的appender-->

  <appenders>

    <!--输出日志信息到控制台-->

    <console name="Console" target="SYSTEM_OUT">

      <!--控制日志的输出格式-->

      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss. SSS} [%t] %-5level %logger{36} - %msg%n"/>

    </console>

  </appenders>

  <!--然后定义logger,只有定义logger并引入appender,appender才会生效-->

  <!--root:用于指定项目的根日志,如果没有单独指定Logger,则会使用root作为默认的日志输出-->

  <loggers>

    <root level="info">

      <appender-ref ref="Console"/>

    </root>

  </loggers>

</configuration>

直接运行之前的某一个例子测试日志:

将配置文件中的INFO级别改成DEBUG级别,然后测试输出如下:

测试手动输出Log日志:

3. Spring 5 框架支持@Nullable注解

(1)@Nullable 注解可以使用在方法上面、属性上面 和 参数上面, 表示方法返回值可以为空、属性值可以为空、参数值可以为空

4. Spring 5 支持函数式注册对象

  1. Spring 5 核心容器支持函数式风格GenericApplicationContext

例子:

或者指定Bean的名称:

5. Spring 5 支持整合 JUnit5

(1)整合JUnit4

第一步:引入Spring相关针对测试的依赖

第二步:创建测试类,使用注解方式完成(这里用到前面的log4j2.xml 配置文件)。

(2)Spring 5 整合JUnit5

第一步:引入JUnit5 的Jar包(直接在IDEA中切换引入

  • 注释掉 Test 注解的import包,然后重新import class 中选择 ”Add‘JUnit 5 ...’...“,进行引入:

引入完后,可以看到:

第二步:创建测试类,使用注解完成

也可以使用一个复合的注解代替上面的两个注解,如下:

6. Spring 5 框架新功能(Webflux)

  • Webflux 的前置知识包括: SpringMVC、SpringBoot、Maven、Java8新特性
  1. SpringWebflux介绍

(1)是Spring5添加的新模块,用于Web开发的,功能与SpringMVC类似的,Webflux使用当前一种比较流行的响应式编程出现的框架。

(2)使用传统的web框架,比如SpringMVC,这些基于Servlet容器,Webflux是一种异步非阻塞的框架,异步非阻塞的框架在Servlet3.1以后才支持,核心是基于Reactor的相应API实现的。

(3)什么是异步非阻塞?

  • 异步和同步针对调用者而言,调用者发送请求,如果等着对方回应之后才去做其他事情就是同步;如果发送请求之后不等着对方回应就取做其他事情就是异步。
  • 非阻塞和阻塞针对被调用者而言,被调用者收到请求之后,做完请求任务之后才去做其他事情就是阻塞,收到请求之后马上给出反馈但继续做原来的事情,完成后再去做请求的事情就是非阻塞。

(4)Webflux特点:

  • 非阻塞:在有限的资源下,提高系统吞吐量和伸缩性,以Reator为基础实现响应式编程
  • 函数式编程:Spring 5 框架基于java8,Webflux使用java8函数式编程方式实现路由请求

(5)比较SpringMVC和Webflux

  • 两个框架都可以使用注解方式,都运行在Tomcat等容器中
  • SpringMVC采用命令式编程,Webflux采用异步响应式编程
  • 比如微服务网关就是可以用Webflux,更加方便(有限资源处理更多操作)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/547275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

立创EDA标准版指南1-原理图与封装库

立创 EDA 标准版 由于立创 EDA 新版本改了对应术语&#xff0c;这是对于的表格&#xff1a; 原理图库->符号 PCB 库->封装 PCB 3D 库->3D 模型 下面的全部讲述将依据旧版称呼&#xff0c;因为更直观&#xff0c;新版称呼模棱两可并且与 AD 的工程架构差别较大 这是…

数据分析11——Pandas中数据偏移/数据切分/数据结构转换

数据偏移&#xff1a; 1、shift函数&#xff1a; 在 Pandas 中&#xff0c;shift 函数用于将数组的数据向前或向后平移指定的步数。它可以应用于 Series 或 DataFrame 类型的数据中&#xff0c;并返回一个平移后的新数据结构&#xff0c;其中每个元素都被取代为原始序列中对应…

kubernetes根据podName获取对应的主机pid

获取指定的podName kubectl get pods -n demo -owide登录对应的主机执行docker命令,获取到容器的id docker ps | grep PODNAME拿到的容器id&#xff0c;执行如下命令 获取容器的长的容器id docker inspect container_id找到容器id后 执行 apt-get install jq cat /var/lib…

关于Word文档的处理【笔记】

关于Word文档的处理【笔记】 前言推荐关于Word文档的处理一、解压word如何恢复1 准备2 解压3 恢复 二、对word文档进行图片替换1 首先解压word文档2 进入word文档存放图片的路径3 批量给图片添加水印4 替换原来的media文件5 压缩为docx文件6 打开 最后 前言 2023-5-20 11:00:1…

uniapp 快手授权登录,发布、编辑、裁剪图片和视频,分享 Ba-Kwai

简介&#xff08;下载地址&#xff09; 快手授权登录&#xff0c;发布、编辑、裁剪图片和视频&#xff0c;一键智能裁剪&#xff0c;分享私信&#xff0c;打开用户主页&#xff0c;挂载小程序等。自带选择图片和选择视频方法。 抖音授权登录、发布、分享 Ba-Aweme&#xff08…

基于GitLab搭建DevSecOps流水线

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130734964 一、GitLab安装 GitLab是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建Web服务&#xff0c;可通过Web界面访问公开的或者私人的项目。它…

【总结】数据建模调研与设计

一、数据建模背景和目的 1.1 数据建模任务背景 a. xxxx 中台新增数据建模模块&#xff0c;对标行业最佳实践&#xff0c;补齐数据中台短板。 b. 以往的数据建模&#xff0c;包括数仓模型的设计、数仓模型的落地&#xff0c;都是通过第三方的工具&#xff0c;例如DBwaver、Nav…

SOFA Weekly|SOFA 大事记、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

【信息安全案例】——应用软件安全(学习笔记)

&#x1f4d6; 前言&#xff1a;随着应用软件日益增多&#xff0c;与我们的生活深度绑定&#xff0c;应用软件的安全性问题愈发凸显。针对恶意代码、代码漏洞等安全风险&#xff0c;必须加强安全意识&#xff0c;采取有效措施进行防范。合理有效的安全措施能够确保用户的信息安…

(数字图像处理MATLAB+Python)第九章图像形态学运算-第一、二节:形态学基础和二值形态学运算

文章目录 一&#xff1a;形态学基础&#xff08;1&#xff09;结构元素&#xff08;2&#xff09;程序 二&#xff1a;二值形态学的基础运算&#xff08;1&#xff09;基本形态变换A&#xff1a;膨胀运算①&#xff1a;概述②&#xff1a;示例③&#xff1a;程序 B&#xff1a;…

CleanMyMac X4.13.4中文版下载及使用教程

随着Mac电脑的广泛普及&#xff0c;越来越多的用户开始关注如何保持自己电脑的快速运行。众所周知&#xff0c;Mac电脑的性能和稳定性得到了广泛认可。但是&#xff0c;随着使用时间的增加和数据的增加&#xff0c;任何电脑都可能变得缓慢和难以使用。为了解决这一问题&#xf…

2-《Java进阶》

2-《Java进阶》 一. java多线程&#xff08;非常重要&#xff09;1.1. 线程java多线程实现方式主要有&#xff1a;1.继承Thread 2.实现Runnable3.实现CallableRunnable 与 Callable的区别&#xff1a;1.2. 线程的状态有哪些&#xff1f;1.3. 线程的状态转换及控制1.4. Java如何…

SeaweedFs使用-通过http接口实现文件操作

通过http接口实现文件操作 SeaweedFs可通过filer的http接口/master中的http接口来进行文件上传 1.通过master的接口进行上传文件 通过各种方式进行请求接口&#xff1a;http://localhost:9333/submit, ip和端口号是master服务的信息。此接口通过post请求方式将文件的二进制流…

3-《安卓基础》

3-《安卓基础》 1.Android系统架构2.四大组件1Activity1.1 生命周期1.2. Activity四种启动模式1.3.Activity任务栈的概念1.3.Activity的显示启动和隐示启动1.4.scheme使用场景&#xff0c;协议格式&#xff0c;如何使用&#xff1f;1.5.activty间传递数据的方式1.6.跨进程启动A…

网络安全-kail linux渗透测试(基础篇)

渗透测试是一个非常广的课程&#xff0c;我们首先要做的是在某个方向精通&#xff0c;再在其他方面也要有涉猎。 大部分的漏洞是国外挖掘的。 一、推荐研究书籍&#xff1a; Metasploit浚透测试指南》肯尼(行业经典) 诸葛建伟翻译 《Metasloit渗透测试魔鬼训练营》诸葛建伟…

运用pyecharts制作可视化大屏(代码展示及效果图-动图)

一、Matplotlib绘图 折线图 import matplotlib.pyplot as plt # 调用画图库 plt.rcParams[font.sans-serif] [SimHei] # 设置成可以显示中文&#xff0c;字体为黑体 plt.figure(figsize(12,8)) # 调整图片尺寸 x [周一,周二,周三,周四,周五,周六,周日] # 设置x轴数据 y [401…

物联网网络通讯知识

RTU是什么 RTU英文全称Remote Terminal Units&#xff0c;中文全称为远程终端单元。远程终端设备(RTU)是安装在远程现场的电子设备&#xff0c;用来监视和测量安装在远程现场的传感器和设备。通俗理解就是能够编程的还可以将数据传输到服务器的工具。RTU内部是包含通讯模块的&…

4、详细版易学版TypeScript - 元组 枚举

一、元组(Tuple) 数组&#xff1a;合并了相同类型的对象 const myArr: Array<number> [1, 2, 3]; 元组(Tuple)&#xff1a;合并了不同类型的对象 // 定义元组时就要确定好数据的类型&#xff0c;并一一对应 const tuple: [number, string] [12, "hi"]; // 添…

QT客户端外包开发的特点

QT是一种跨平台的C应用程序开发框架&#xff0c;主要用于开发图形用户界面(GUI)应用程序。它提供了一套丰富的类库和工具&#xff0c;可以帮助开发者快速构建高质量、可扩展、易于维护的应用程序。今天和大家分享一下QT的主要特点和注意的问题&#xff0c;希望对大家有所帮助。…

探索LeetCode【0011】盛最多水的容器(已懂)

目录 0. 题目1. 官方解答一&#xff08;已懂&#xff09;2. 精简解答二&#xff08;已懂&#xff09;3. 正确性解释 0. 题目 题目链接&#xff1a;【0011】盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i,…