纠纷奇闻作文社交美文家庭
聚热点
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

SpringBoot启动流程

6月6日 桃花醉投稿
  SpringBoot启动流程我们简单的先介绍一下SpringBoot的启动流程都需要哪些步骤1。加载配置文件2。准备上下文环境3。创建上下文对象4。启动spring5。启动tomcat
  我们先来看一下springboot的启动流程图
  SpringBoot启动流程图
  下面附上源码,我们从SpringApplication。run(WebApplicaiton。class,args);开始进入
  找到SpringApplication下的run方法。在代码中都有注释标注,相信大家都可以看懂publicConfigurableApplicationContextrun(String。。。args){longstartTimeSystem。nanoTime();DefaultBootstrapContextbootstrapContextcreateBootstrapContext();ConfigurableApplicationC设置了一个名为java。awt。headless的系统属性configureHeadlessProperty();获取监听器所有实现SpringApplicationRunListener这个接口的监听器SpringApplicationRunListenerslistenersgetRunListeners(args);调用监听器里所有写的starting方法listeners。starting(bootstrapContext,this。mainApplicationClass);try{ApplicationArgumentsapplicationArgumentsnewDefaultApplicationArguments(args);准备上下文的环境ConfigurableEnvironmentenvironmentprepareEnvironment(listeners,bootstrapContext,applicationArguments);configureIgnoreBeanInfo(environment);启动的图标BannerprintedBannerprintBanner(environment);创建上下文的对象contextcreateApplicationContext();context。setApplicationStartup(this。applicationStartup);prepareContext(bootstrapContext,context,environment,listeners,applicationArguments,printedBanner);进入到spring的容器方法refreshContext(context);afterRefresh(context,applicationArguments);DurationtimeTakenToStartupDuration。ofNanos(System。nanoTime()startTime);if(this。logStartupInfo){newStartupInfoLogger(this。mainApplicationClass)。logStarted(getApplicationLog(),timeTakenToStartup);}调用了监听器的started方法listeners。started(context,timeTakenToStartup);callRunners(context,applicationArguments);}catch(Throwableex){handleRunFailure(context,ex,listeners);thrownewIllegalStateException(ex);}try{计算springboot启动耗时DurationtimeTakenToReadyDuration。ofNanos(System。nanoTime()startTime);执行监听器的ready方法listeners。ready(context,timeTakenToReady);}catch(Throwableex){handleRunFailure(context,ex,null);thrownewIllegalStateException(ex);}}
  我们再走到prepareContext方法中privatevoidprepareContext(DefaultBootstrapContextbootstrapContext,ConfigurableApplicationContextcontext,ConfigurableEnvironmentenvironment,SpringApplicationRunListenerslisteners,ApplicationArgumentsapplicationArguments,BannerprintedBanner){context。setEnvironment(environment);postProcessApplicationContext(context);applyInitializers(context);设置完环境变量监听器会调用的方法listeners。contextPrepared(context);bootstrapContext。close(context);if(this。logStartupInfo){logStartupInfo(context。getParent()null);logStartupProfileInfo(context);}AddbootspecificsingletonbeansConfigurableListableBeanFactorybeanFactorycontext。getBeanFactory();beanFactory。registerSingleton(springApplicationArguments,applicationArguments);if(printedBanner!null){beanFactory。registerSingleton(springBootBanner,printedBanner);}if(beanFactoryinstanceofAbstractAutowireCapableBeanFactory){((AbstractAutowireCapableBeanFactory)beanFactory)。setAllowCircularReferences(this。allowCircularReferences);if(beanFactoryinstanceofDefaultListableBeanFactory){((DefaultListableBeanFactory)beanFactory)。setAllowBeanDefinitionOverriding(this。allowBeanDefinitionOverriding);}}if(this。lazyInitialization){context。addBeanFactoryPostProcessor(newLazyInitializationBeanFactoryPostProcessor());}LoadthesourcesSetObjectsourcesgetAllSources();Assert。notEmpty(sources,Sourcesmustnotbeempty);load(context,sources。toArray(newObject〔0〕));调用监听器的contextLoaded方法listeners。contextLoaded(context);}然后我们找到refreshContext方法javaprivatevoidrefreshContext(ConfigurableApplicationContextcontext){if(this。registerShutdownHook){shutdownHook。registerApplicationContext(context);}refresh(context);}
  进入到ServletWebServerApplicationContext类下的refresh方法Overridepublicfinalvoidrefresh()throwsBeansException,IllegalStateException{try{进入到了spring容器super。refresh();}catch(RuntimeExceptionex){WebServerwebServerthis。webSif(webServer!null){webServer。stop();}}}
  我会在之后的文章中更新在springboot启动的过程中是如何加载配置以及tomcat是如何启动的。相信大家在结合流程图看源码一定会很清晰的
投诉 评论 转载

连续劈扣!詹皇大儿子新赛季首秀打疯了,老詹高四赛季会很疯狂北京时间9月25日,詹姆斯大儿子布朗尼跟随塞拉峡谷高中打了一场季前赛,这是布朗尼作为高四生的首秀,他连续上演霸气劈扣,引爆全场。布朗尼在高中生涯经历了一些波折,最初打替补,还重……SpringBoot启动流程SpringBoot启动流程我们简单的先介绍一下SpringBoot的启动流程都需要哪些步骤1。加载配置文件2。准备上下文环境3。创建上下文对象4。启动spring5。启动to……黄芪可以和菊花一起泡水喝吗黄芪可以和枸杞一起泡水喝吗黄芪是我们大家都知道的一种中药材,同时我们很多服用过黄芪的人也都知道,黄芪有着很好的补气作用,但黄芪单独的作用是比较小的,所以很多人会与其他药材一起使用那么黄芪可以和菊花一起泡……黄芪可以每天泡水喝吗黄芪可以直接嚼着吃吗黄芪是我们大家都很熟悉的一种中药材,同时黄芪的作用功效也是非常多的,黄芪的吃法也会有很多的,但大多数人都是用黄芪来泡水喝,那么黄芪可以每天泡水喝吗?黄芪可以直接嚼着吃吗?黄芪可……七夕习俗七夕节有哪些习俗?七夕约会秘籍夏日生活打卡季每年农历七月初七是我国的传统节日七夕节,七夕节又被称为乞巧节、少女节或女儿节。七夕近些年,网上又称七夕节为中国的情人节。传说每年的农……孕妇可以打狂犬疫苗吗?孕妇能不能打狂犬疫苗?大家都知道,孕妇有很多禁忌,不管是吃还是别的方面,有的人问,孕妇能不能打狂犬疫苗,孕妇被狗咬了怎么办,今天小编就来告诉你。孕妇可以打狂犬疫苗吗答案是,孕妇如果被猫狗咬伤、……孕妇耳鸣会影响胎儿吗?孕妇失眠多梦怎么调理?都说女人怀孕的时候是个宝,要精心呵护着,生怕哪儿磕着碰着了,孕妇在怀孕期间身体都很虚弱,需要着重调养。那么孕妇耳鸣会影响胎儿吗?孕妇失眠多梦怎么调理?孕妇耳鸣会影响胎儿吗……睡觉多梦怎么办?睡觉多梦是什么原因?经常听到有人说:昨晚没有休息好,做了一夜的梦;我晚上梦多,简直没有睡着。睡觉多梦会导致第二天工作生活的精神状态差,大脑和神经得不到最舒服的休息。想知道睡觉多梦是怎么回事吗?想知……冬天适合打耳洞吗春秋打耳洞最好很多人都有耳洞,想打耳洞的人注意了,冬天最好不要打耳洞,打耳洞的最佳季节为春秋两季,不热不冷的时候,耳洞不容易发炎,冬天温度太低,有可能会起冻疮,所以尽量避免。冬天适合打耳洞吗……孕妇产假怎么写请假条提高孕妇学校的教学质量,探索新的教学模式,以满足日益增长的孕妇健康信息需求。下面小编整理了孕妇产假怎么写请假条孕妇产假请假条范文,希望大家喜欢!孕妇产假请假条范本1xx(……零星工程合同实际工作中,由于绝大多数单位不重视零星工程管理,管理意识淡漠,管理水平低,造成了很大的资金浪费。那么签订零星工程合同需要注意什么呢?以下是品学网小编为大家整理的零星工程合同范文……网红皮肤为什么那么好?网红为什么那么瘦?近年来各种网红在网络上泛滥,这些网红都有一些共同的特点,比如这些网红都很有钱,这些网红皮肤那么白,这些网红都很瘦等等,网红虽然不是每个都漂亮,但是网红拥有这些特质会让你更快的吸……
绘本小蓝和小黄活动反思沙滩上的童话教学反思范文学校开学第一课教学教案信件书写教案设计幼儿园大班地球教案祖国多么广大的教案设计学前班拼音教学反思范文蜻蜓点水的近义词风靡全球的牛仔裤教案长春版春天来到深山里教学反思辰州途中中考语文阅读答案应该听谁的教案范文
二货一波,要把你笑爆热议世界杯抽签亚洲5队将团灭,巴西抽死亡之组,阿根廷上上签时尚发型精选气质女生最爱甘地怎么死的,甘地人格力量有哪些?独占春的养殖方法和注意事项最美的一句话超级好玩的忍者休闲解压游戏美丽的大草原如何看待快餐文化cad如何合并多线?cad合并多段线方法吃绝户正在悄悄兴起,独生女家庭成目标,倒插门只是常规手段爆笑而又有个性的最新语录可以当签名

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形