Spring5 框架 ---- Spring5的新功能
1. Spring5框架新功能
整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中已经被删除
1. Spring5框架自带了通用的日志封装
- Spring5 已经移除了 Log4jConfigListener,官方建议使用 Log4j2
- Spring5 框架整合了 Log4j2
第一步 引入 jar 包
第二步 创建 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>
2. Spring5框架核心容器支持@Nullable注解
-
@Nullable
注解可以使用在方法上面,属性上面,参数上面,表示方法返回可以为空,属性值可以为空,参数值可以为空。 -
注解用在方法上面,方法返回值可以为空
- 注解使用在方法参数里面,方法参数可以为空
- 注解使用在属性上面,属性值可以为空
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);
}
4. Spring5支持整合JUnit5
- 整合 JUnit4
第一步 引入 Spring 相关针对测试依赖
第二步 创建测试类,使用注解方式完成
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();
}
}
- Spring5 整合 JUnit5
第一步 引入 JUnit5 的 jar 包
第二步 创建测试类,使用注解完成
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();
}
}
- 使用一个复合注解替代上面两个注解完成整合
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介绍
- 是 Spring5 添加新的模块,用于 web 开发的,功能和 SpringMVC 类似的,Webflux 使用当前一种比较流行响应式编程出现的框架。
-
使用传统 web 框架,比如 SpringMVC,这些基于 Servlet 容器,Webflux 是一种异步非阻塞的框架,异步非阻塞的框架在 Servlet3.1 以后才支持,核心是基于 Reactor 的相关 API 实现的。
-
解释什么是异步阻塞
异步和同步
阻塞与非阻塞
都是针对的对象不一样
- 异步和同步针对调用者:调用者发送请求,如果等着对方回应之后才去做其他事情就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步。
- 阻塞与非阻塞针对被调用者:被调用者受到请求之后,做完请求任务之后才给出反馈就是阻塞,受到请求之后立马给出反馈然后再去做事情就是非阻塞。
- Webflux 特点:
第一 非阻塞式:在有限资源下,提供系统吞吐量和伸缩性,以 Reactor 为基础实现响应式编程。
第二 函数式编程:Spring5 框架基于 java8,Webflux 使用 Java8 函数式编程方式实现路由请求
- 比较 SpringMVC
第一 两个框架都可以使用注解方式,都运行在 Tomet 等容器中
第二 SpringMVC 采用命令式编程,Webflux 采用异步响应式编程
2. 响应式编程(Java实现)
- 什么是响应式编程
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似 “=B1+C1” 的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
- Java8及其之前版本
提供的观察者模式两个类 Observer 和 Observable
3. 响应式编程(Reactor实现)
学完 springboot 再来更新 …
4. SpringWebflux执行流程和核心API
学完 springboot 再来更新 …
5. SpringWebflux(基于注解编程模型)
学完 springboot 再来更新 …
6. SpringWebflux(基于函数式编程模型)
学完 springboot 再来更新 …
- 点赞
- 收藏
- 关注作者
评论(0)