2.1.2_BeanFactory.getBean內部處理邏輯
在一個已經註冊了BeanDefinition的BeanFactory中,通過getBean方法就可以獲取到對應的Bean對象,但BeanFactory的內部處理邏輯還是非常復雜,主要的工作可以分為getBean和createBean兩部分,下面以DefaultListableBeanFactory為例來說明。
getBean階段:
1、DefaultListableBeanFactory本身繼承了DefaultSingletonBeanRegistry類,內部持有已經創建的Singleton的實例。查找已有的Singleton中是否有這個Bean,有的話則進行加工並返回。
2、如果BeanFactory
3、如果BeanFactory有此Bean定義,就需要在BeanFactory內創建這個Bean。這時需要對BeanDefinition進行處理,獲取DependentBean(通過getBean的遞歸使用),然後根據Bean類型(Singleton、Prototype、Scope)等來創建Bean。
4、最後根據需要進行類型轉換。
createBean階段:
1、通過resolveBeanClass來加載所需要的Class。
2、然後對Class進行一些InstantiationAwareBeanPostProcessor
3、接下來doCreateBean進行實際的Bean創建的工作,此時根據Bean定義使用Factory、自定義初始化函數或通用模式進行Bean創建。
4、通過populateBean進行初始化之後的預處理以及字段註入操作,註入模式包括byName和byType,然後會對普通的property進行設置。
5、然後會對Bean進行一些Aware的綁定操作(BeanNameAware等),BeanPostProcess處理、afterPropertiesSet、invokeCustomInitMethod等Bean內部的個性化配置操作。
6、最後會做一點檢查,包括Singleton的一致性、對
2.1.2_BeanFactory.getBean內部處理邏輯