spring boot test启动过程

本文详细解析了Spring Boot测试时的启动流程。从@SpringBootTest注解开始,通过SpringExtension实现JUnit5的生命周期钩子,实例化TestContextManager。接着,SpringBootTestContextBootstrapper加载SpringBootContextLoader,利用SPI机制获取TestExecutionListener,特别是ServletTestExecutionListener。在测试生命周期中,ServletTestExecutionListener的setUpRequestContextIfNecessary方法被调用,若ApplicationContext未缓存,则调用SpringBootContextLoader.loadContext启动Spring Boot上下文。
摘要由CSDN通过智能技术生成

加载Spring的上下文启动流程
在这里插入图片描述
https://www.processon.com/embed/61cd2436e401fd7a538b36a7
解析:

  • @SpringBootTest标记了junit5的注解@ExtendWith(SpringExtension.class)

  • SpringExtension实现了junit5的test的生命周期的钩子函数,如BeforeAllCallback,TestInstancePostProcessor,BeforeEachCallback

  • 在junit5的钩子函数中BeforeAllCallback会实例化TestContextManager

  • TestContextManager的钩子函数会解析@SpringBootTest的元注解@BootstrapWith(SpringBootTestContextBootstrapper.class),进而获取到关键类SpringBootContextLoader

  • TestContextManager也会通过spring的SPI机制解析META-INF/spring.factories获取所有实现TestExecutionListener的接口实现类,
    关键类ServletTestExecutionListener-针对servletweb类型

  • test生命周期钩子函数调用TestExecutionListener的方法,进而会触发执行ServletTestExecutionListener的setUpRequestContextIfNecessary
    setUpRequestContextIfNecessary

  • 会从缓存中获取ApplicationContext,没有最终调用SpringBootContextLoader.loadContext
    加载spring的上下文

  • SpringBootContextLoader.loadContext会获取上面解析配置推测的类型,最终执行SpringApplication.run启动spring
    boot加载spring的上下文

public class SpringBootContextLoader extends AbstractContextLoader {
   

	public class SpringBootContextLoader extends AbstractContextLoader {
   
    
	@Override
	public ApplicationContext loadContext(MergedContextConfiguration config) throws Exception {
   
		Class<?>[] configClasses = config.getClasses();
		String[
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值