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源码分析之BeanFactory · 叁

前言

今天我们继续研究BeanFactory ,不过今天分享的内容有点零散,主要包括三个方面的内容,一个是ApplicationContextInitializer的初始化,这个严格来说和BeanFactory没什么关系,但是源码也分析了,所以这里提一下,另一个是ignoredDependencyInterfaces,这个是BeanFactory的一个核心属性,用于屏蔽我们不需要进行依赖检查和自动注入的接口,最后一个是beanDefinitionMap,这一次我们找到了它最开始初始化的代码,所以这里一起分享下。

BeanFactory初始化过程

ApplicationContextInitializer初始化

下面是 ApplicationContextInitializer的初始化操作,ApplicationContextInitializerspring boot提供的一套初始化机制,它的initialize方法在spring boot容器刷新前执行,通常被用来进行配置文件初始化,我们也可以自己定义自己的ApplicationContextInitializer,后面我们可以做一期demo示例。

ApplicationContextInitializer的初始化操作是在 prepareContext方法中被执行的,默认情况下,会有7ApplicationContextInitializer被执行

下面是第一个ApplicationContextInitializer的方法源码其他类似,需要注意的是ApplicationContextInitializer本身是顺序的,而且方法内部也有排序操作:

在第二个ApplicationContextInitializer初始化方法内容,它往容器中注册了BeanFactory的后置处理器

回到容器初始化开始的地方

根据下面的截图,我们可以看出来,beanFactory其实在容器创建完成后,已经完成了一部分初始化操作,所以想要搞清楚beanFactroy的初始,必须要回到beanFactory初始化的地方。

发现ignoredDependencyInterfaces

ignoredDependencyInterfacesBeanFactory的一个核心属性,用于屏蔽我们不需要进行依赖检查和自动注入的接口,下面是BeanFactory初始化 ignoredDependencyInterfaces的代码,这段代码也是在创建容器的时候被执行的。

ignoredDependencyInterfaces存放的是需要忽略的依赖接口,默认情况下只会加入BeanFactoryAware的接口,根据官方解释,加入ignoredDependencyInterfaces中的接口,会忽略依赖检查,并且不会被autowire

找到beanDefinitionMap初始化开始的地方

下面是beanDefinitionMap最开始初始化的代码,我们可以看到,在执行完registry.registerBeanSefinition方法之后,第一个beandefinition信息被成功注册。

下面是registerAnnotationConfigProcessors方法的完整截图:

这个方法在AnnotationConfigUtils这个类中,它是在实例化AnnotationConfigServletWebServerApplicationContextreader属性的时候被执行的。

这个方法的作用是注册给定的注解后置处理器,从包名上我们可以看出来,这五个类有两个是和事件监听器相关的,有三个是和注解相关的,其中还有一个类没有被注入,是和jpa相关的组件,应该和我们没有引入jpa的依赖和配置有关系。关于beanDefinitionMap我们暂时就先说这么多,至于这五个最先被注册的元老级类,我们后面再来详细了解。

总结

spring boot的源码真的太上头了,这些内容本来是中午要输出的,但是由于早上没有太多进展,最后连图都没画好,然后中午也没有理出内容,一直等到下班回到家,才开始真正干活,所以今天的绝大多数内容都是晚上回到家才搞出来的。严格来说,最近这几天都是如此,但是经过我最近这段时间的梳理和硬啃,现在感觉多少有点眉目了,自我感觉关于run方法我已经梳理完40%~50%的内容,剩下reflush方法大概能占到30%的内容,事件监听相关内容大概占比20%,反正感觉慢慢能看见胜利的曙光了……加油吧,没有别的选择了~

好了,各位小伙伴晚安!

posted @ 2021-09-07 22:24  云中志  阅读(61)  评论(0编辑  收藏  举报