SpringBoot的执行流程

 public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
        this.sources = new LinkedHashSet();
        this.bannerMode = Mode.CONSOLE;
        this.logStartupInfo = true;
        this.addCommandLineProperties = true;
        this.addConversionService = true;
        this.headless = true;
        this.registerShutdownHook = true;
        this.additionalProfiles = new HashSet();
        this.isCustomEnvironment = false;
        this.resourceLoader = resourceLoader;
        Assert.notNull(primarySources, "PrimarySources must not be null");
        this.primarySources = new LinkedHashSet(Arrays.asList(primarySources));
        this.webApplicationType = WebApplicationType.deduceFromClasspath();
        this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
        this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
        this.mainApplicationClass = this.deduceMainApplicationClass();
    }

从源码可以看出,SpringApplication的初始化过程主要包括4部分,具体说明如下:

(1)

thiswebApplicationType=WebApplicationTypededuceFromClasspath()


用于判断当前 webApplicationType应用的类型。deduceFromClasspath()方法用于查看 Classpath 类路径下是否存在某个特征类,从而判断当前webApplicationType类型是SERVLET应用(Spring5之前的传统MVC 应用)还是REACTIVE 应用(Spring5开始出现的 WebFlux交互式应用)。

(2)

this.setlnitializers(this.getSpringFactoriesInstances(ApplicationContextlnitializer.class))

用于设置SpringApplication应用的初始化器。在初始化器设置过程中,会使用 Spring类加载器SpringFactoriesLoader 从 META-INF/spring.factories 类路径下的META-INF下的 spring.factores 文件中获取所有可用的应用初始化器类 ApplicationContextlnitializer。

(3)

this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class))


用于设置 SpringApplication 应用的监听器。监听器设置的过程与上一步初始化器设置的过程基本一样,也是使用 SpringFactoriesLoader从META-INF/springfactories 类路径下的 META-INF下的 springfactores文件中获取所有可用的监听器类ApplicationListener。

(4)this.mainApplicationClass=this.deduceMainApplicationClass()

this.mainApplicationClass=this.deduceMainApplicationClass()

用于推断并设置项目main()方法启动的主程序启动类。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值