Spring5框架新功能介绍

Spring5框架新功能介绍

一 自带通用的日志封装

(1) Spring5已经移除Log4jConfigListrner,官方建议使用Log4j2
(2) 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>  

二 支持@Nullable注解

说明
(1) @Nullable注解使用在方法上,方法返回值可以未空
(2) 使用在方法参数里面,方法参数可以为空
(3) 使用在属性上,属性值可以为空

三 支持函数式风格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); 
}

四 支持整合JUnit5

1 整合JUnit4
(1) 第一步:引入Spring相关针对测试依赖
在这里插入图片描述
第二步:创建测试类,使用注解方式

@RunWith(SpringJUnit4ClassRunner.class) // 单元测试框架 
@ContextConfiguration("classpath:bean1.xml") // 加载配置文件 
public class JTest4 {     
	@Autowired     
	private UserService userService;     
	@Test     
	public void test1() {         
		userService.accountMoney();
	}
}

2 Spring5整合JUnit5
(1) 引入JUnit5的jar包
在这里插入图片描述
(2) 创建测试类,使用注解

@ExtendWith(SpringExtension.class) 
@ContextConfiguration("classpath:bean1.xml") 
public class JTest5 {     
	@Autowired     
	private UserService userService;     
	@Test     
	public void test1() {         
		userService.accountMoney();
	}
}

3 使用一个复合注解替代2,3两个完成整合

@SpringJUnitConfig(locations = "classpath:bean1.xml") 
public class JTest5 {     
	@Autowired     
	private UserService userService;     
	@Test     
	public void test1() {         
		userService.accountMoney();
	} 
}

五 支持Webflux

1 SpringWebflux介绍
(1) 是 Spring5 添加新的模块,用于 web 开发的,功能和 SpringMVC 类似的,Webflux 使用 当前一种比较流程响应式编程出现的框架。
(2) 使用传统 web 框架,比如 SpringMVC,这些基于 Servlet 容器,Webflux 是一种异步非阻 塞的框架,异步非阻塞的框架在 Servlet3.1 以后才支持,核心是基于 Reactor 的相关 API 实现 的。
(3)什么是异步非阻塞
异步和同步针对调用者,调用者发送请求,如果等着对方回应之后才去做其他事情就是同 步,如果发送请求之后不等着对方回应就去做其他事情就是异步

阻塞和非阻塞针对被调用者,被调用者受到请求之后,做完请求任务之后才给出反馈就是阻 塞,受到请求之后马上给出反馈然后再去做事情就是非阻塞
(4)Webflux 特点
第一 非阻塞式:在有限资源下,提高系统吞吐量和伸缩性,以 Reactor 为基础实现响应式编程
第二 函数式编程:Spring5 框架基于 java8,Webflux 使用 Java8 函数式编程方式实现路由请求
(5)比较 SpringMVC
第一 两个框架都可以使用注解方式,都运行在 Tomet 等容器中
第二 SpringMVC 采用命令式编程,Webflux 采用异步响应式编程

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

(2)Java8及其之前版本 提供的观察者模式两个类 Observer 和 Observable

public class ObserverDemo extends Observable { 
 
    public static void main(String[] args) {         
    	ObserverDemo observer = new ObserverDemo();         
    	// 添加观察者         
    	observer.addObserver((o,arg)->{            
    	 System. out .println("发生变化");         
    	});         
    	observer.addObserver((o,arg)->{             
    		System. out .println("手动被观察者通知,准备改变");         	 
    	});        
    	observer.setChanged(); // 数据变化         
    	observer.notifyObservers(); // 通知     
    } 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值