1. 程式人生 > >Spring原始碼解析(二):obtainFreshBeanFactory

Spring原始碼解析(二):obtainFreshBeanFactory

spring的ApplicationContext容器的初始化流程主要由AbstractApplicationContext類中的refresh方法實現。

而refresh()方法中獲取新工廠的主要是由obtainFreshBeanFactory()實現的,後續的操作均是beanFactoty的進一步處理。

然後我們找到obtainFreshBeanFactory()

再找到第一步refreshBeanFactory();更新工廠中檢視

發現是一個抽象類。找到它在AbstractRefreshableApplicationContext的實現類

 

發現它先通過hasBeanFactory判斷是否已經存在BeanFactory,如果存在則進行銷燬,關閉。如果已存在可能會出現問題。

保證不出現問題後,再進行建立createBeanFactory()

返回一個BeanFactory例項,隨後在為其設定序列化id   setSerializationId,customizeBeanFactory定製工廠,載入bean定義 loadBeanDefinitions

其中找到在AbstractXmlApplicationContext類實現的loadBeanDefinitions抽象類

可以看到前三部都是在設定環境,設定資源載入:這個資源載入就是通過new ClasspathXmlApplicationContext();時裡面傳入的xml配置檔案,設定實體解析器:將xml配置裡的bean裝換成實體

設定完後再進行初始化效驗,是否存在錯誤,比如類名之類錯誤等...

進行配置檔案讀取

 

隨後的操作差不多都是對xml讀取操作。

然後我們回過頭來AbstractApplicationContext看 getBeanFactory();

發現他又是一個抽象類:找到AbstractRefreshableApplicationContext中的實現類

有沒有發現,我們又回到了AbstractRefreshableApplicationContext類,並且就是獲取refreshBeanFactory()處理的beanFactory,判斷是否為空,不為空就則返回。

最終到refresh()方法中,給後續方法加工處理。

這也就大致的走了一篇obtainFreshBeanFactory

 

本人也處於學習階段,以上如有錯誤或不恰當之處,歡迎指正....