1. 程式人生 > >2.1.2_BeanFactory.getBean內部處理邏輯

2.1.2_BeanFactory.getBean內部處理邏輯

一致性 default tab justify ont reg 特殊 sta clas

在一個已經註冊了BeanDefinitionBeanFactory中,通過getBean方法就可以獲取到對應的Bean對象,但BeanFactory的內部處理邏輯還是非常復雜,主要的工作可以分為getBeancreateBean兩部分,下面以DefaultListableBeanFactory為例來說明。

getBean階段:

技術分享

1、DefaultListableBeanFactory本身繼承了DefaultSingletonBeanRegistry類,內部持有已經創建的Singleton的實例。查找已有的Singleton中是否有這個Bean,有的話則進行加工並返回。

2、如果BeanFactory

本身不包含此Bean定義,但是有parent,則會委派給parent去處理。

3、如果BeanFactory有此Bean定義,就需要在BeanFactory內創建這個Bean。這時需要對BeanDefinition進行處理,獲取DependentBean(通過getBean的遞歸使用),然後根據Bean類型(SingletonPrototypeScope)等來創建Bean

4、最後根據需要進行類型轉換。

createBean階段:

技術分享

1、通過resolveBeanClass來加載所需要的Class

2、然後對Class進行一些InstantiationAwareBeanPostProcessor

的處理。

3、接下來doCreateBean進行實際的Bean創建的工作,此時根據Bean定義使用Factory、自定義初始化函數或通用模式進行Bean創建。

4、通過populateBean進行初始化之後的預處理以及字段註入操作,註入模式包括byNamebyType,然後會對普通的property進行設置。

5、然後會對Bean進行一些Aware的綁定操作(BeanNameAware等),BeanPostProcess處理、afterPropertiesSetinvokeCustomInitMethodBean內部的個性化配置操作。

6、最後會做一點檢查,包括Singleton的一致性、對

DisposableBean的特殊處理等,這樣就完成了Bean的創建工作。

2.1.2_BeanFactory.getBean內部處理邏輯