1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

spring-boot启动过程源码分析内容补充

前言

昨天我们从源码层面简单分析了一下spring boot的启动过程,由于时间仓促,加上内容都是临场发挥,因此整个过程还是有点混乱的,而且内容是也有一点点的谬误,为了让昨天的内容看起来不那么混乱,同时也为了纠正昨天的谬误,我们今天先来做一点点补充,这样也有利于我梳理后续内容的思路。下面就让我们直接开始吧。

run方法源码分析补充

昨天晚上我说过今天要先画一个时序图,所以开始之前,我们先看下run方法的执行过程时序图:

从上面这张时序图中,我们很直观地看出run方法的执行过程。其中最关键的内容有两部分,一个是和监听器相关的操作,另一个是和应用容器相关的操作,从图上我们也可以看出这一点,这两个的内容和操作都很多,而且基本上贯穿了整个run方法,所以下一步我们要分析的就是监听器和应用容器这两块的内容,但是今天可能来不及分享了。

纠正谬误

下面我们纠正昨天的一个谬误,昨天我说这段代码是创建spring工厂实例,这么说虽然没有什么问题,但结合整段代码的逻辑来说就是有问题的。

exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporter.class,
					new Class[] { ConfigurableApplicationContext.class }, context);

这段代码在这里的作用是构建SpringBootExceptionReporter的实例对象,构建的对象是在catch中用的,详细查看源代码的话,你会发现其实它是用来分析启动过程中错误的。下面的这段代码,各位小伙伴看着肯定不陌生,在启动spring boot报错的时候会经常看到:

说到这里,我们再补充点spring boot启动异常处理的相关知识点。如果在启动过程中发生异常,spring boot会调用handleRunFailure方法处理异常,其中一个核心参数就是我们前面创建的SpringBootExceptionReporter实例集合,在方法内部主要进行了以下几步操作:

  • 处理退出码。这个退出码是从异常中获取到的,获取到之后会注册到SpringBootExceptionHandler中。
  • 调用监听器failed方法,推送ApplicationFailedEvent事件
  • 调用reportFailure,打印错误报告
  • 关闭context容器
  • 抛出异常信息

方法源码如下:

好了,spring boot启动主流程暂时就先分享这么多。

总结

经过今天的梳理之后,我发现对于spring boot的启动流程,整体感觉清晰了好多,特别是时序图画完之后。

而且更重要的是,从图上我们直接就能很直观地看出整个启动流程,看清楚启动过程的各个节点以及相关的操作,这就特别有助于我们理解spring boot的启动过程,另外从时序图上,我们还可以直观地看出启动过程的关键点、核心点,这样也有助于我们把握知识的重点,确定下一步地学习计划。

总之,我现在感觉画图确实是一个特别好的学习方式,比如画脑图、画时序图、流程图等,这些图表对于知识地梳理和总结都有着特别积极的地效果,我是越来越喜欢这种方式了。

posted @ 2021-09-06 08:32  云中志  阅读(41)  评论(0)    收藏  举报