Spring5进阶-08篇

92 阅读2分钟

学习插图.jpg

前篇

Spring5框架的新功能

1.整个Spring5框架的代码基于JDK8,运行时基于JDK9,许多不建议的类和方法在代码库中删除

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

3.Spring5.0已经移除了Log4jConfigListener,官方建议使用Log4J2。

4.Spring5框架整合Log4J2:

第一步 引入相关jar包

2023-02-01_200106.jpg

第二步 编写log4j2.xml配置文件

<?xml version="2.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>

单独测试

public class UserLog {
    private static final Logger log = LoggerFactory.getLogger(UserLog.class);

    public static void main(String[] args) {
        log.info("hello logger");
    }
}

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

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

(1)注解用在方法上面,方法返回值可以为空

2023-02-01_203900.jpg

(2)注解使用在方法参数里面,方法参数可以为空

2023-02-01_203912.jpg

(3))注解使用在属性上面,属性值可以为空

2023-02-01_203923.jpg

Spring5核心容器支持函数式风格GenericApplicationContext

//函数式风格创建对象,交给 spring 进行管理

@Test

public void testGenericApplicationContext() {

//1 创建 GenericApplicationContext 对象

GenericApplicationContext context = new GenericApplicationContext();

//2 调用 context 的方法对象注册

context.refresh();

context.registerBean("user1",User.class,() -> new User());

//3 获取在 spring 注册的对象

// User user = (User)context.getBean("com.atguigu.spring5.test.User"); User user = (User)context.getBean("user1");

System.out.println(user);

}

Spring框架的新功能-Webflux

1.SpringWebflux介绍

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

2023-02-02_103936.jpg

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

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

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

异步和同步针对调用者:调用者发送请求,如果等待对方回应之后再去做其他事情,就叫同步;如果调用者发送请求后不等对方回应就去做其他事情,就叫异步。

阻塞和非阻塞针对被调用者:被调用者收到请求后,不管当前有没有任务在进行,立马做出该请求的回应,叫做非阻塞;如果被调用者收到请求后,有任务在进行,把当前任务做完之后再做出回应的叫做阻塞。

(4)Webflux的特点:

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

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

(5)比较SpringMVC

2023-02-02_105206.jpg

第一 两个框架都可以使用注解方式,都运行在Tomcat等容器中。

第二 SpringMVC使用命令式编程,Webflux使用异步响应式编程。

后续更新...