SpringBoot启动流程
SpringBoot启动流程我们简单的先介绍一下SpringBoot的启动流程都需要哪些步骤 1.加载配置文件 2.准备上下文环境 3.创建上下文对象 4.启动spring 5.启动tomcat
我们先来看一下springboot的启动流程图
SpringBoot启动流程图
下面附上源码,我们从 SpringApplication.run(WebApplicaiton.class,args); 开始进入
找到SpringApplication下的run方法。在代码中都有注释标注,相信大家都可以看懂 public ConfigurableApplicationContext run(String... args) { long startTime = System.nanoTime(); DefaultBootstrapContext bootstrapContext = createBootstrapContext(); ConfigurableApplicationContext context = null; //设置了一个名为java.awt.headless的系统属性 configureHeadlessProperty(); //获取监听器 所有实现SpringApplicationRunListener这个接口的监听器 SpringApplicationRunListeners listeners = getRunListeners(args); //调用监听器里所有写的starting方法 listeners.starting(bootstrapContext, this.mainApplicationClass); try { ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); //准备上下文的环境 ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments); configureIgnoreBeanInfo(environment); //启动的图标 Banner printedBanner = printBanner(environment); //创建上下文的对象 context = createApplicationContext(); context.setApplicationStartup(this.applicationStartup); prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner); //进入到spring的容器方法 refreshContext(context); afterRefresh(context, applicationArguments); Duration timeTakenToStartup = Duration.ofNanos(System.nanoTime() - startTime); if (this.logStartupInfo) { new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), timeTakenToStartup); } //调用了监听器的started方法 listeners.started(context, timeTakenToStartup); callRunners(context, applicationArguments); } catch (Throwable ex) { handleRunFailure(context, ex, listeners); throw new IllegalStateException(ex); } try { //计算springboot启动耗时 Duration timeTakenToReady = Duration.ofNanos(System.nanoTime() - startTime); //执行监听器的ready方法 listeners.ready(context, timeTakenToReady); } catch (Throwable ex) { handleRunFailure(context, ex, null); throw new IllegalStateException(ex); } return context; }
我们再走到prepareContext方法中 private void prepareContext(DefaultBootstrapContext bootstrapContext, ConfigurableApplicationContext context, ConfigurableEnvironment environment, SpringApplicationRunListeners listeners, ApplicationArguments applicationArguments, Banner printedBanner) { context.setEnvironment(environment); postProcessApplicationContext(context); applyInitializers(context); //设置完环境变量 监听器会调用的方法 listeners.contextPrepared(context); bootstrapContext.close(context); if (this.logStartupInfo) { logStartupInfo(context.getParent() == null); logStartupProfileInfo(context); } // Add boot specific singleton beans ConfigurableListableBeanFactory beanFactory = context.getBeanFactory(); beanFactory.registerSingleton("springApplicationArguments", applicationArguments); if (printedBanner != null) { beanFactory.registerSingleton("springBootBanner", printedBanner); } if (beanFactory instanceof AbstractAutowireCapableBeanFactory) { ((AbstractAutowireCapableBeanFactory) beanFactory).setAllowCircularReferences(this.allowCircularReferences); if (beanFactory instanceof DefaultListableBeanFactory) { ((DefaultListableBeanFactory) beanFactory) .setAllowBeanDefinitionOverriding(this.allowBeanDefinitionOverriding); } } if (this.lazyInitialization) { context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor()); } // Load the sources Set
2021年中国消费者全健康需求洞察健康需求丨洞察报告核心摘要概念定义全健康,OneHealth,是系统性地思考和研究人类健康动物健康以及环境健康的新策略新方法和新学科,它强调全生态全产业链的健康,覆盖用户健康雇员健
2021年中国企业服务研究报告核心摘要ToC流量见顶后,ToB服务,即企业服务一直是大家关注的重点。但是,企业服务的市场增量与变量在哪里,如何做好企业服务,企业服务在不同的行业中表现出了哪些具体特点,市场并未有
2021年中国碳中和行业研究报告碳中和丨研究报告前言复活节岛位于南太平洋东部,向东距离智利大陆本土约3600公里,荷兰航海家罗赫芬于1722年4月5日复活节发现并登上该岛,该岛因此而得名。复活节岛因巨大的石雕像和
2021年中国游戏直播行业研究报告游戏直播丨洞察报告核心摘要行业监管游戏直播反垄断靴子落地,虎牙和斗鱼被依法禁止合并。游戏直播行业将在更充分的市场竞争和政策指引下,继续稳步健康发展。市场规模2020年中国整体游戏直
2021年中国文博IP商业化研究报告文博IP丨研究报告核心摘要行业背景近年我国政策逐渐放开对博物馆商业化的限制,持续刺激和支持文博产业化发展,同时伴随数字化技术发展知识产权保护力度增强居民文化消费能力提高等因素,我国
2021年中国家装行业研究报告家装行业丨研究报告核心摘要家装产业链不断进阶家装流程冗长,专业壁垒较高,传统家装行业效率低下,产品和服务形态单一,无法满足新时代环境下的消费升级背景。随着互联网时代的到来,互联网家
2021年中国视频云场景应用洞察白皮书核心摘要碎片化的消费模式极致的观感需求创新应用场景,让短视频超高清视频和实时音视频成为需求风口。视频云为行业提供技术支撑,AI赋能全链条,实现全民生产全域应用,行业步入视频服务社会
2021年房产交易服务行业NPS研究案例居理买房网核心摘要房产行业主战场由上游开发商向中游经纪平台演进,打造高水准的惊喜购房体验成为业内真命题。其中,新房经纪市场前景广阔,二手房交易市场良田待耕。家亦非家房子兼顾安家的精神属性,和
今天杭州飞白云机场,两个人一个月10000多今天在飞机快落地的时候拍到了这个角度的夕阳,好美。可能是出差的缘故,也经常刷到出差人的头条,感觉比我们补助少的基本没有了,好可怜,200一天,吃住。不过我的工资在我们公司售后部又已
2021年二季度全球手机出货量排名,小米首次超苹果2021年第二季度全球总共卖出3。2亿只智能手机。三星因其强大的供应链控制能力,已经数十年稳居第一。让人以外的人,小米集团在第二季度,销量大幅增长,达到了5100万台手机。首次超越
都说小米cv颜值高,性能如何?778g处理器性能表现8分很多小伙伴都想问,小米civi采用了什么处理器?处理器7分小米civi搭载了6nm制成工艺的高通骁龙778处理器。属于中高端处理器。安兔兔跑分53万,性能