目錄
創(chuàng)新互聯(lián)公司專注于屏邊網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供屏邊營(yíng)銷型網(wǎng)站建設(shè),屏邊網(wǎng)站制作、屏邊網(wǎng)頁設(shè)計(jì)、屏邊網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開發(fā)服務(wù),打造屏邊網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供屏邊網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。解析配置類
總結(jié)一下
解析配置類流程圖:https://www.processon.com/view/link/5f9512d5e401fd06fda0b2dd
解析配置類思維腦圖:https://www.processon.com/view/link/614c83cae0b34d7b342f6d14
在啟動(dòng)Spring時(shí),需要傳入一個(gè)AppConfig.class給ApplicationContext,ApplicationContext 會(huì)根據(jù)AppConfig類封裝為一個(gè)BeanDefinition,這種BeanDefinition我們把它稱為配置類 BeanDefinition。
ConfigurationClassPostProcessor中會(huì)把配置類BeanDefinition取出來
構(gòu)造一個(gè)ConfigurationClassParser用來解析配置類BeanDefinition,并且會(huì)生成一個(gè)配置類對(duì)象ConfigurationClass
如果配置類上存在@Component注解,那么解析配置類中的內(nèi)部類(這里有遞歸,如果內(nèi)部類 也是配置類的話)
如果配置類上存在@PropertySource注解,那么則解析該注解,并得到PropertySource對(duì)象, 并添加到environment中去
如果配置類上存在@ComponentScan注解,那么則解析該注解,進(jìn)行掃描,掃描得到一系列的 BeanDefinition對(duì)象,然后判斷這些BeanDefinition是不是也是配置類BeanDefinition(只要存 在@Component注解就是配置類,所以基本上掃描出來的都是配置類),如果是則繼續(xù)解析該 配置類,(也有遞歸),并且會(huì)生成對(duì)應(yīng)的ConfigurationClass
如果配置類上存在@Import注解,那么則判斷Import的類的類型:
如果是ImportSelector,那么調(diào)用執(zhí)行selectImports方法得到類名,然后在把這個(gè)類當(dāng)做
配置類進(jìn)行解析**(也是遞歸)**
如果是ImportBeanDefinitionRegistrar,那么則生成一個(gè)ImportBeanDefinitionRegistrar 實(shí)例對(duì)象,并添加到配置類對(duì)象中(ConfigurationClass)的 importBeanDefinitionRegistrars屬性中。
如果配置類上存在@ImportResource注解,那么則把導(dǎo)入進(jìn)來的資源路徑存在配置類對(duì)象中的 importedResources屬性中。
如果配置類中存在@Bean的方法,那么則把這些方法封裝為BeanMethod對(duì)象,并添加到配置 類對(duì)象中的beanMethods屬性中。
如果配置類實(shí)現(xiàn)了某些接口,則看這些接口內(nèi)是否定義了@Bean的默認(rèn)方法
如果配置類有父類,則把父類當(dāng)做配置類進(jìn)行解析
AppConfig這個(gè)配置類會(huì)對(duì)應(yīng)一個(gè)ConfigurationClass,同時(shí)在解析的過程中也會(huì)生成另外的一 些ConfigurationClass,接下來就利用reader來進(jìn)一步解析ConfigurationClass
如果ConfigurationClass是通過@Import注解導(dǎo)入進(jìn)來的,則把這個(gè)類生成一個(gè) BeanDefinition,同時(shí)解析這個(gè)類上@Scope,@Lazy等注解信息,并注冊(cè)BeanDefinition
如果ConfigurationClass中存在一些BeanMethod,也就是定義了一些@Bean,那么則解 析這些@Bean,并生成對(duì)應(yīng)的BeanDefinition,并注冊(cè)
如果ConfigurationClass中導(dǎo)入了一些資源文件,比如xx.xml,那么則解析這些xx.xml文 件,得到并注冊(cè)BeanDefinition
如果ConfigurationClass中導(dǎo)入了一些ImportBeanDefinitionRegistrar,那么則執(zhí)行對(duì)應(yīng) 的registerBeanDefinitions進(jìn)行BeanDefinition的注冊(cè)
1. 解析AppConfig類,生成對(duì)應(yīng)的ConfigurationClass
2. 再掃描,掃描到的類都會(huì)生成對(duì)應(yīng)的BeanDefinition,并且同時(shí)這些類也是ConfigurationClass
3. 再解析ConfigurationClass的其他信息,比如@ImportResource注解的處理,@Import注解的 處理,@Bean注解的處理
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧