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源码分析之beanDefinitionNames · 壹

前言

今天原本打算搞清楚spring boot初始化scan的流程的,但是在调试过程中,发现压根就没有执行scan方法,这个方法只有basePackage不为空的时候才会执行,起初我以为是需要在@SpringBootApplication指定包路径才可以,但是加了之后发现还是没用,所以最后就暂时放弃了:

然后我就不知道该分享什么了……

但是最后我在debug的时候,发现beanFactory有个 beanDefinitionNames的成员变量,它的元素数量会在reflush方法执行之后急剧增加,同时也有个与之对应的成员变量beanDefinitionMap元素数量和它一致,也是在reflush之后数据量增多,而且从名字也可以看出来他们和spring bean相关的组件,另外他们所存储的数据包含了我自己定义的服务:

所以最后我决定沿着beanFactorybeanDefinitionNames的初始化路线,看下这些数据到底是如何初始化的,希望最后能更接近spring boot初始化的核心秘密,于是就有了今天的内容。

beanDefinitionNames

开始分享beanDefinitionNames相关知识点之前,我们先补充一个知识点——spring boot默认容器。从创建容器的源码我们可以看出,在不指定容器类别的情况下,spring boot默认为我们创建的容器是AnnotationConfigServletWebServerApplicationContext(在此之前,我一直以为它走的是default那块的代码,debug之后发现我理解错了),这个默认容器本身是继承了ServletWebServerApplicationContext,所以说默认情况下,spring boot为我们创建的是servlet容器:

好了,默认容器的相关知识点我们先补充这么多,下面我们开始beanDefinitionNames的相关内容分享。

首先,我们先介绍下beanDefinitionNames。从上面的debug截图中我们其实可以看出来一些信息,beanDefinitionNames其实就是存放spring bootbean的名字的,通过这个名字我们就可以从spring boot的容器中拿出我们bean的实例:

这也就是说,beanDefinitionNames就是spring bootIOC容器的名单,通过这个名单我们可以找到容器中的每一个类。

关于beanDefinitionNames我们暂时就先说这么多,等后面分析BeanFactory的时候我们到时候再来补充。下面我们来看下面这张时序图:

时序图svg原图地址如下:

https://gitee.com/sysker/picBed/raw/master/%E5%AE%B9%E5%99%A8%E5%88%B7%E6%96%B0%E5%90%AF%E5%8A%A8%E6%97%B6%E5%BA%8F%E5%9B%BE.svg

这张时序图比较清楚地展示了spring boot初始化beanFactorybeanDefinitionNames的过程(beanDefinitionMap的初始化也是如此),但关于这张时序图我感觉我能说的很少,虽然调用过程很清晰,但我目前还没有梳理清楚各个方法的作用(初始化过程所起的作用),因为每一个方法除了我这里罗列的方法调用外,还有很多其他的操作,而且由于时间关系,今天也没有时间梳理了,目前的计划是明天把这块的内容补上,然后尽可能再多扩充一些新的知识。

总结

实话说,spring boot的源码是真的难啃,从我自己的感觉,以及产出成果来说,确实是太难了,不仅进度慢,难出成果,而且出来的东西也确实没有以前分享demo或者其他内容那么顺畅,现在的感觉就像是在乱石堆里挖井,挖半天下不去,自己还类的够呛,但是把,万事开头难,等所有内容都梳理的七七八八了,我相信一切都会变的顺畅起来的,所以接着啃呗!

posted @ 2021-09-06 08:33  云中志  阅读(195)  评论(1编辑  收藏  举报