spring bean在初始化的過(guò)程中,大致流程如下,后面我們將根據(jù)以下的幾點(diǎn)來(lái)分析和理解源碼:
1.轉(zhuǎn)換對(duì)應(yīng)的beanName
2.嘗試從緩存中加載單例
3.bean的實(shí)例化
4.原型模式的依賴檢查
5.檢測(cè)parentBeanFacotory
6.將存儲(chǔ)XML配置文件的GernericBeanDefinition轉(zhuǎn)換為RootBeanDefinition.
7.尋找依賴
8.針對(duì)不同的scope進(jìn)行Bean的創(chuàng)建
9.類型轉(zhuǎn)換
FactoryBean的使用
一般情況,spring通過(guò)反射機(jī)制利用Bean的class屬性指定實(shí)現(xiàn)類來(lái)實(shí)現(xiàn)Bean。

圖1
緩存中獲取單例Bean
單例只會(huì)在spring的同一個(gè)容器內(nèi)被創(chuàng)建一次,后續(xù)再獲取Bean直接從單例緩存中獲取。此時(shí)會(huì)存在循環(huán)依賴的情況,程序首先嘗試從緩存中加載,然后再次嘗試從singletionFactories中加載。如果存在循環(huán)依賴,spring創(chuàng)建Bean的原則是不等Bean創(chuàng)建完成就會(huì)將創(chuàng)建Bean的objectFactory提早曝光加入到緩存中,一旦下一個(gè)Bean創(chuàng)建時(shí)需要依賴上一個(gè)Bean,則直接使用objectFactory.