Spring 5 笔记 - 新功能

news/2025/2/12 1:54:21/

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.ppmy.cn/news/71734.html

相关文章

IMX6ULL裸机篇之DDR3初始化

一. DDR3L初始化简介 I.MX6U-ALPHA 开发板上带有一个 256MB/512MB 的 DDR3 内存芯片&#xff0c;16 位宽&#xff0c;型号为 NT5CC128M16JR/MT5CC256M16EP&#xff0c;nanya 公司出品的&#xff0c;分为对应 256MB 和 512MB 容量。 我自己用的开发板上 DDR3L内存芯片型号为…

街电入局两轮电动车充电,讲出了“跃迁”式的新故事?

以共享单车为起点&#xff0c;中国的共享经济正蓬勃发展。国家信息中心披露的数据显示&#xff0c;2022年&#xff0c;中国共享经济市场交易规模约38320亿元&#xff0c;同比增长约3.9%。 虽然同属共享经济&#xff0c;但与部分共享单车企业嫁入“豪门”全身而退不同&#xff…

动态规划-买卖股票的最佳时机 II and III

动态规划-买卖股票的最佳时机 III 1 买卖股票的最佳时机 II1.1 题目1.2 示例1.2.1 示例 1&#xff1a;1.2.2 示例 2&#xff1a;1.2.3 示例 3&#xff1a; 1.3 算法题解1.3.1 动态规划代码实现1.3.2 贪心实现代码 2 买卖股票的最佳时机 III2.1 题目2.2 示例2.2.1 示例 1:2.2.2 …

LeetCode 124. 二叉树中的最大路径和

124. 二叉树中的最大路径和 描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一…

Python 实验五 字符串与正则表达式

1.输入一个字符串&#xff0c;将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。 a input("请输入一个字符串&#xff1a;") b a[1::2] print("老串为&#xff1a;%a&#xff0c;新串为&#xff1a;%a"%(a,b))2.编写程序&#xff0c;生…

使用Spring Boot和Spring Cloud实现微服务架构下的API网关:简化客户端与多个微服务的交互流程

使用Spring Boot和Spring Cloud实现微服务架构下的API网关&#xff1a;简化客户端与多个微服务的交互流程 一、介绍1 微服务架构的发展趋势2 微服务架构下的挑战3 API网关的作用和价值 二、 Spring Boot和Spring Cloud简介1 Spring Boot的特点和优势2 Spring Cloud的主要功能和…

Metasploitable2靶机渗透学习

目录 一、介绍 二、环境 三、渗透攻击 1.前期渗透 1.1主机发现 1.2.端口扫描 1.3.测试漏洞 2.弱密码漏洞 2.1系统弱密码登录&#xff08;telnet &#xff1a;23端口&#xff09; 2.2 MySQL弱密码登录&#xff08;端口&#xff1a;3306&#xff09; 2.3 PostgreSQL弱…

WuThreat身份安全云-TVD每日漏洞情报-2023-05-18

漏洞名称:用友 NC 反序列化远程代码执行漏洞 漏洞级别:未定义 漏洞编号:NULL 相关涉及:version < 6.5 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-12466 漏洞名称:Linux kernel 释放后使用 漏洞级别:高危 漏洞编号:CVE-2023-32233,CNNV…