概述

以下的是项目的启动入口

@SpringBootApplication
public class NavWebApplication {
    public static void main(String[] args) {       
        SpringApplication.run(NavWebApplication.class, args);
    }
}

SpringApplication

它其实不是Spring里有的东西,换言之,它是SpringBoot带来的新的类,SpringApplication里面封装了一套Spring应用的启动流程。

一般来说,默认的SpringApplication执行流程已经可以满足大多数需求,如果用户想要获得更多的自主权,可以通过Set方法注入相应的拓展。

@SpringBootApplication
public class NavWebApplication {
    public static void main(String[] args) {
        // SpringApplication.run(NavWebApplication.class, args);
    SpringApplication app = new SpringApplication(NaWebApplication.class);
    app.setXXX( ... );
    app.run( args);
    }
}

SpringApplication实例初始化

@SuppressWarnings({ "unchecked", "rawtypes" })
    public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
        this.resourceLoader = resourceLoader;
        Assert.notNull(primarySources, "PrimarySources must not be null");
        this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
        this.webApplicationType = WebApplicationType.deduceFromClasspath();
        setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
        setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
        this.mainApplicationClass = deduceMainApplicationClass();
    }

步骤分析:

  1. deduceFromClasspath() 推断应用类型。
    image.png
  2. setInitializers()
    image.png
  3. setListeners()
    image.png
  4. deduceMainApplicationClass()

SpringApplication的run方法

启动流程

最后修改:2020 年 11 月 06 日
如果觉得我的文章对你有用,请随意赞赏