Spring5 框架新功能
整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中删除了。
Spring 5 框架自带了通用的日志封装
- Spring5 已经移除
Log4jConfigListener
,官方建议使用Log4j2
- Spring5 框架整合
Log4j2
整合 log4j2
步骤
引入 jar 包 :
log4j-api-2.11.2.jar
、log4j-core-2.11.2.jar
、log4j-slf4j-impl-2.11.2.jar
、slf4j-api-1.7.30.jar
创建
log4j2.xml
(名字固定,不可变)配置文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!--日志级别以及优先级排序: 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>
运行时会输出对应的日志信息
示例代码:手动输出日志信息
1 | public class UserLog { |
运行结果
Spring5 框架核心容器支持@Nullable 注解
@Nullable
注解可以使用在方法、属性、参数上面,表示方法返回可以为空,属性值可以为空,参数值可以为空
Spring5 核心容器支持函数式风格
GenericApplicationContext
支持 lambda 表达式相关操作
1 | // 函数式风格创建对象 |
Spring5 支持整合 JUnit5
整合 JUnit4
- 引入 spring 相关测试的依赖
spring-test-5.3.23.jar
- 创建测试类,引用注解方法方式完成
1 | // 单元测试框架 |
整合 JUnit5
需要引入 JUnit5 jar包
创建测试类,使用注解实现。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 写法1
//@ExtendWith(SpringExtension.class)
//@ContextConfiguration("classpath:bean1.xml")
// 写法2 符合注解
@SpringJUnitConfig(locations = "classpath:bean1.xml")
public class JTest5 {
@Autowired
private AccountService accountService;
@Test
public void test1() {
accountService.accountMoney();
}
}
Spring5 框架新功能 - SpringWebflux
Webflux是 Spring5 添加新的模块,用于 web 开发的,功能和 SpringMVC 类似的,Webflux 使用 当前一种比较流行的响应式编程出现的框架。
使用传统 web 框架,比如 SpringMVC,这些基于 Servlet 容器,Webflux 是一种异步非阻塞的框架,异步非阻塞的框架在 Servlet3.1 以后才支持,核心是基于 Reactor 的相关 API 实现的。
解释什么是异步非阻塞 :⭐
(1)异步和同步 (针对调用者)
- 同步: 调用者发送请求,如果等着对方回应之后才去做其他事情就是同步
- 异步: 调用者发送请求,如果发送请求之后不等着对方回应就去做其他事情就是异步 √
(2)非阻塞和阻塞 (针对被调用者)
- 阻塞: 被调用者受到请求之后,做完请求任务之后才给出反馈就是阻塞
- 非阻塞: 被调用者受到请求之后,受到请求之后马上给出反馈然后再去做事情就是非阻塞 √
Webflux 特点
- 非阻塞式:在有限资源下,提高系统吞吐量和伸缩性,以 Reactor 为基础实现响应式编程。
- 函数式编程:Spring5 框架基于 java8,Webflux 使用 Java8 函数式编程方式实现路由请求。
SpringMVC 和 Webflux之间区别
- 相同:两个框架都可以使用注解方式,都运行在 Tomcat 等容器中。
- 不同:SpringMVC 采用命令式编程,Webflux 采用异步响应式编程。
响应式编程 - Java实现
概念:什么是响应式编程 响应式编程是一种面向 数据流 和 变化传播 的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
例子:电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似”=B1+C1”的公 式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
Java8 及其之前版本是提供的观察者模式两个类 Observer
和 Observable
实现
1 | public class ObserverDemo extends Observable { |