spring-boot源碼分析之BeanFactory · 叁

前言
今天我們繼續(xù)研究BeanFactory,不過今天分享的內(nèi)容有點零散,主要包括三個方面的內(nèi)容,一個是ApplicationContextInitializer的初始化,這個嚴格來說和BeanFactory沒什么關系,但是源碼也分析了,所以這里提一下;另一個是ignoredDependencyInterfaces,這個是BeanFactory的一個核心屬性,用于屏蔽我們不需要進行依賴檢查和自動注入的接口;最后一個是beanDefinitionMap,這一次我們找到了它最開始初始化的代碼,所以這里一起分享下。
BeanFactory初始化過程
ApplicationContextInitializer初始化
下面是ApplicationContextInitializer的初始化操作,ApplicationContextInitializer是spring boot提供的一套初始化機制,它的initialize方法在spring boot容器刷新前執(zhí)行,通常被用來進行配置文件初始化,我們也可以自己定義自己的ApplicationContextInitializer,后面我們可以做一期demo示例。
ApplicationContextInitializer的初始化操作是在 prepareContext方法中被執(zhí)行的,默認情況下,會有7個 ApplicationContextInitializer被執(zhí)行

下面是第一個ApplicationContextInitializer的方法源碼其他類似,需要注意的是ApplicationContextInitializer本身是順序的,而且方法內(nèi)部也有排序操作:

在第二個ApplicationContextInitializer初始化方法內(nèi)容,它往容器中注冊了BeanFactory的后置處理器

回到容器初始化開始的地方
根據(jù)下面的截圖,我們可以看出來,beanFactory其實在容器創(chuàng)建完成后,已經(jīng)完成了一部分初始化操作,所以想要搞清楚beanFactroy的初始,必須要回到beanFactory初始化的地方。

發(fā)現(xiàn)ignoredDependencyInterfaces
ignoredDependencyInterfaces是BeanFactory的一個核心屬性,用于屏蔽我們不需要進行依賴檢查和自動注入的接口,下面是BeanFactory初始化ignoredDependencyInterfaces的代碼,這段代碼也是在創(chuàng)建容器的時候被執(zhí)行的。

ignoredDependencyInterfaces存放的是需要忽略的依賴接口,默認情況下只會加入BeanFactoryAware的接口,根據(jù)官方解釋,加入ignoredDependencyInterfaces中的接口,會忽略依賴檢查,并且不會被autowire

找到beanDefinitionMap初始化開始的地方
下面是beanDefinitionMap最開始初始化的代碼,我們可以看到,在執(zhí)行完registry.registerBeanSefinition方法之后,第一個bean的definition信息被成功注冊。
下面是registerAnnotationConfigProcessors方法的完整截圖:




這個方法在AnnotationConfigUtils這個類中,它是在實例化AnnotationConfigServletWebServerApplicationContext的reader屬性的時候被執(zhí)行的。


這個方法的作用是注冊給定的注解后置處理器,從包名上我們可以看出來,這五個類有兩個是和事件監(jiān)聽器相關的,有三個是和注解相關的,其中還有一個類沒有被注入,是和jpa相關的組件,應該和我們沒有引入jpa的依賴和配置有關系。關于beanDefinitionMap我們暫時就先說這么多,至于這五個最先被注冊的元老級類,我們后面再來詳細了解。
總結(jié)
spring boot的源碼真的太上頭了
,這些內(nèi)容本來是中午要輸出的,但是由于早上沒有太多進展,最后連圖都沒畫好,然后中午也沒有理出內(nèi)容,一直等到下班回到家
,才開始真正干活,所以今天的絕大多數(shù)內(nèi)容都是晚上回到家才搞出來的。嚴格來說,最近這幾天都是如此,但是經(jīng)過我最近這段時間的梳理和硬啃,現(xiàn)在感覺多少有點眉目了,自我感覺關于run方法我已經(jīng)梳理完40%~50%的內(nèi)容,剩下reflush方法大概能占到30%的內(nèi)容,事件監(jiān)聽相關內(nèi)容大概占比20%,反正感覺慢慢能看見勝利的曙光了
……加油吧,沒有別的選擇了
~
好了,各位小伙伴晚安
!
