Spring5 框架 ---- Spring5的新功能

举报
在人间负债^ 发表于 2024/11/26 17:21:43 2024/11/26
【摘要】 1. Spring5框架新功能整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中已经被删除 1. Spring5框架自带了通用的日志封装Spring5 已经移除了 Log4jConfigListener,官方建议使用 Log4j2Spring5 框架整合了 Log4j2第一步 引入 jar 包第二步 创建 log4j2.xml 配置文...

1. Spring5框架新功能

整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中已经被删除

1. Spring5框架自带了通用的日志封装

  1. Spring5 已经移除了 Log4jConfigListener,官方建议使用 Log4j2
  2. Spring5 框架整合了 Log4j2

第一步 引入 jar 包

image.png

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

配置文件的内容一般都是固定的…

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > 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>

image.png

2. Spring5框架核心容器支持@Nullable注解

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

  2. 注解用在方法上面,方法返回值可以为空

image.png

  1. 注解使用在方法参数里面,方法参数可以为空

image.png

  1. 注解使用在属性上面,属性值可以为空

image.png

3. Spring5核心容器支持函数式风格GenericAppliactionContext

    @Test
    public void getGenericAppliactionContext(){

        //创建GenericApplicationContext对象
        GenericApplicationContext context = new GenericApplicationContext();

        //调用context的方法对象注册
        context.refresh();
        context.registerBean("user", User.class, ()->new User());

        //获取在spring注册对象
        User user = (User) context.getBean("user");
        System.out.println(user);

    }

image.png

4. Spring5支持整合JUnit5

  1. 整合 JUnit4

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

image.png

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

package com.fickler.spring5.test;

import com.fickler.spring5.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @author dell
 * @version 1.0
 */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:bean1.xml")
class JTest4 {

    @Autowired
    private UserService userService;

    @Test
    public void test1(){
        userService.accountMoney();
    }

}

  1. Spring5 整合 JUnit5

第一步 引入 JUnit5 的 jar 包

image.png

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

package com.fickler.spring5.test;

import com.fickler.spring5.service.UserService;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

/**
 * @author dell
 * @version 1.0
 */

@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:bean2.xml")
public class JTest5 {

    @Autowired
    private UserService userService;

    @Test
    public void test1(){
        userService.accountMoney();
    }

}

  1. 使用一个复合注解替代上面两个注解完成整合
package com.fickler.spring5.test;

import com.fickler.spring5.service.UserService;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

/**
 * @author dell
 * @version 1.0
 */

//@ExtendWith(SpringExtension.class)
//@ContextConfiguration("classpath:bean2.xml")

@SpringJUnitConfig(locations = "classpath:bean2.xml")
public class JTest5 {

    @Autowired
    private UserService userService;

    @Test
    public void test1(){
        userService.accountMoney();
    }

}

2. Webflux

1. SpringWebflux介绍

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

image.png

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

  2. 解释什么是异步阻塞

异步和同步
阻塞与非阻塞
都是针对的对象不一样

  • 异步和同步针对调用者:调用者发送请求,如果等着对方回应之后才去做其他事情就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步。
  • 阻塞与非阻塞针对被调用者:被调用者受到请求之后,做完请求任务之后才给出反馈就是阻塞,受到请求之后立马给出反馈然后再去做事情就是非阻塞。
  1. Webflux 特点:

第一 非阻塞式:在有限资源下,提供系统吞吐量和伸缩性,以 Reactor 为基础实现响应式编程。

第二 函数式编程:Spring5 框架基于 java8,Webflux 使用 Java8 函数式编程方式实现路由请求

  1. 比较 SpringMVC

image.png

第一 两个框架都可以使用注解方式,都运行在 Tomet 等容器中
第二 SpringMVC 采用命令式编程,Webflux 采用异步响应式编程

2. 响应式编程(Java实现)

  1. 什么是响应式编程

响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似 “=B1+C1” 的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。

  1. Java8及其之前版本

提供的观察者模式两个类 Observer 和 Observable

3. 响应式编程(Reactor实现)

学完 springboot 再来更新 …

4. SpringWebflux执行流程和核心API

学完 springboot 再来更新 …

5. SpringWebflux(基于注解编程模型)

学完 springboot 再来更新 …

6. SpringWebflux(基于函数式编程模型)

学完 springboot 再来更新 …

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。