zoukankan      html  css  js  c++  java
  • springboot 的启动流程

    1.我们springboot 项目的启动类如下。

    方式1

    @SpringBootApplication
    public class SpringbootZkLockApplication {
    public static void main(String[] args) {
    SpringApplication.run(SpringbootZkLockApplication.class, args);
    }
    }
    点击 run 方法源码进入如下,
    /**
    * Static helper that can be used to run a {@link SpringApplication} from the
    * specified source using default settings.
    * @param primarySource the primary source to load
    * @param args the application arguments (usually passed from a Java main method)
    * @return the running {@link ApplicationContext}
    */
    public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
    return run(new Class<?>[] { primarySource }, args);
    }
    继续 点击 run 方法进入源码,
    /**
    * Static helper that can be used to run a {@link SpringApplication} from the
    * specified sources using default settings and user supplied arguments.
    * @param primarySources the primary sources to load
    * @param args the application arguments (usually passed from a Java main method)
    * @return the running {@link ApplicationContext}
    */
    public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
    return new SpringApplication(primarySources).run(args);
    }
    我们看到 run() 方法的返回值为 ConfigurableApplicationContext。
    看到这里我们就知道了SpringBoot 启动类的底层 是 new SpringApplication(primarySources).run(args);
    这时候我们的启动类可以可以换成 如下方式启动。
    方式2
    @SpringBootApplication
    public class SpringbootZkLockApplication {

    public static void main(String[] args) {
    //SpringApplication.run(SpringbootZkLockApplication.class, args);
    new SpringApplication(SpringbootZkLockApplication.class).run(args);
    }
    new SpringApplication(SpringbootZkLockApplication.class).run(args); 可以拆分为2个部分启动
    方式3
    @SpringBootApplication
    public class SpringbootZkLockApplication {

    public static void main(String[] args) {
    //SpringApplication.run(SpringbootZkLockApplication.class, args);
    SpringApplication application = new SpringApplication(SpringbootZkLockApplication.class);
    application.run(args);
    }
    }
    上面这三种启动方式都是等价的,都可以启动 SpringBoot 项目。只不过是第一种方式是我们常用的,经过SpringBoot 封装过的启动方式。 
    @EnableAutoConfiguration 注解 加载了我们第三方配置的信息进行 Tomcat 启动。
    DispatcherServletAutoConfiguration ---》ServletWebServerFactoryAutoConfiguration  创建 tomcat。

  • 相关阅读:
    内存:你跑慢点行不行?CPU:跑慢点你养我吗?内存:我不管!(内附超全思维导图)
    又能扯皮了!没内存了还能看片?
    写给大忙人看的进程和线程
    Python面试常用的高级用法,怎么动态创建类?
    LeetCode 74,直击BAT经典面试题
    LeetCode 73,为什么第一反应想到的解法很有可能是个坑?
    Golang基础教程——map使用篇
    手把手教你学numpy,从此数据处理不再慌【三】
    从辗转相除法到求逆元,数论算法初体验
    深入了解机器学习决策树模型——C4.5算法
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/11596870.html
Copyright © 2011-2022 走看看