zoukankan      html  css  js  c++  java
  • springboot启动流程简单总结

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

    其中需要关注的是:

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

    (1)@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置。简单概括一下就是,是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器。

    (2)@Configuration:它就是JavaConfig形式的Spring Ioc容器的配置类。被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境。

    (3)@ComponentScan:组件扫描,可自动发现和装配Bean,功能其实就是自动扫描并加载符合条件的组件或者bean定义,最终将这些bean定义加载到IoC容器中。


    二:详细解释:

    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下添加字符文件图标,就可以在启动时候打印)。
    (3)构造Spring容器(ApplicationContext)上下文。
    (4)SpringApplicationRunListeners发布finish事件。
    (5)StopWatch计时器停止计时。

    如果想要深入看详细的步骤,建议去网上搜索,很多作者都写了细节的部分。

    可以参考我认为写的不错的两篇文章:

    https://blog.csdn.net/u014252478/article/details/88789852?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3

    https://blog.csdn.net/m0_37962779/article/details/78957309?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

  • 相关阅读:
    字符串阵列分别输出元素的索引,原值和长度
    一个字符转换为整数
    从字符串数组中寻找数字的元素
    C#创建自己的扩展方法
    判断是否为空然后赋值
    C# yield关键词使用
    从字符串数组中把数字的元素找出来
    C#实现一张塔松叶
    计算2个时间之间经过多少Ticks
    对int array进行排序
  • 原文地址:https://www.cnblogs.com/lgg20/p/12917808.html
Copyright © 2011-2022 走看看