其他分享
首页 > 其他分享> > [springboot]springboot启动流程

[springboot]springboot启动流程

作者:互联网

Spring Boot程序有一个入口,就是main方法。main里面调用SpringApplication.run()启动整个Spring Boot程序,该方法所在类需要使用@SpringBootApplication复合注解。

其中需要关注的是:

@SpringBootApplication注解其实是包含了三个注解:

二:详细解释:

1、SpringBoot启动的时候,会构造一个SpringApplication的实例,然后调用这个实例的run方法,在run方法调用之前,也就是构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:

  1. 把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数.
  2. 判断是否是web程序,并设置到webEnvironment的boolean属性中.
  3. 创建并初始化ApplicationInitializer,设置到initializers属性中 。
  4. 创建并初始化ApplicationListener,设置到listeners属性中 。
  5. 初始化主类mainApplicatioClass。

源代码:

private void initialize(Object[] sources) {
      if (sources != null && sources.length > 0) {
          //把sources设置到SpringApplication的sources属性中,目前只是一个MyApplication类对象
        this.sources.addAll(Arrays.asList(sources)); 
      }
          //判断是否是web程序,并设置到webEnvironment的boolean属性中
      this.webEnvironment = deduceWebEnvironment(); 
          //找出所有的初始化器,默认有5个,设置到initializers属性中 。
      setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
          //找出所有的应用程序监听器,默认有9个,设置到listeners属性中 。
      setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
          //找出运行的主类(main class)
      this.mainApplicationClass = deduceMainApplicationClass();
    }

2、SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:

  1. 构造一个StopWatch计时器,观察SpringApplication的执行 。
  2. 获取SpringApplicationRunListeners并封装到SpringApplicationRunListeners中启动,用于监听run方法的执行。
  3. 创建并初始化ApplicationArguments,获取run方法传递的args参数。
  4. 创建并初始化ConfigurableEnvironment(环境配置)。
  5. 打印banner(只用在Classpath下添加字符文件图标,就可以在启动时候打印)。
  6. 构造Spring容器(ApplicationContext)上下文。
  7. SpringApplicationRunListeners发布finish事件。
  8. StopWatch计时器停止计时。

标签:初始化,run,springboot,启动,Spring,流程,SpringApplication,sources,属性
来源: https://blog.csdn.net/qq_37574623/article/details/116460470