springBoot启动模拟实现

  1. SpringApplication构造方法
    在启动SpringBoot项目时,我们经常会遇到下图1.1这样的代码。
    图1.1
    SpringApplication.run内部调用了SpringApplication的构造方法,所以要分析SpringBoot的启动流程首先就要分析该构造方法。
    在这里插入图片描述
    在这里插入图片描述
    SpringApplication构造方法主要做了以下五件事情:
    (1)获取Bean Definition
    (2)推断应用类型,通过jar包推断应用类型,从而创建不同的ApplicationContext,例如pom文件有sprinbg-boot-starter-web依赖,就很可能被推断为web应用。
    (3)添加ApplicationContext初始化器,对ApplicationContext功能进行拓展
    (4)添加监听器与事件,监听SpringBoot启动过程中的事件
    (5)主类推断,推断main方法所在内
    1.1 获取Bean Definition
    打印构造方法执行后获取到的Bean Definition
SpringApplication spring = new SpringApplication(A39_1.class);
  ConfigurableApplicationContext context = spring.run(args);

for (String name : context.getBeanDefinitionNames()) {
     System.out.println("name: " + name + " 来源:" + 			      context.getBeanFactory().getBeanDefinition(name).getResourceDescription());
 }

在这里插入图片描述
1.2 推断类型

this.webApplicationType = WebApplicationType.deduceFromClasspath();

在这里插入图片描述
当前应用中包含spring-boot-starter-web依赖,该依赖存在DispatcherHandler和Servlet,最终被SpringBoot推断为web应用。
1.3 扩展
给SpringApplication添加初始化器,初始化器添加Bean对象到容器中。

spring.addInitializers(applicationContext -> {
            if (applicationContext instanceof GenericApplicationContext gac) {
                gac.registerBean("bean3", Bean3.class);
            }
        });

1.4 监听器

spring.addListeners(event -> System.out.println("\t事件为:" + event.getClass()));

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值