-
通過之前的“Spring IOC容器初始化主體流程”中的關(guān)健節(jié)點分析秃殉,我們知道Bean創(chuàng)建子流程入口在AbstractApplicationContext#refresh()中的
finishBeanFactoryInitialization(beanFactory)處。
- 進入了finishBeanFactoryInitialization
// Stop using the temporary ClassLoader for type matching.
beanFactory.setTempClassLoader(null);
// Allow for caching all bean definition metadata, not expecting further changes.
beanFactory.freezeConfiguration();
// Instantiate all remaining (non-lazy-init) singletons.
// 實例化所有立即加載的單例bean
beanFactory.preInstantiateSingletons();
-
繼續(xù)進?DefaultListableBeanFactory類的preInstantiateSingletons?法愉老,我們找到下?部分的代碼灯荧,看到??Bean或者普通Bean列肢,最終都是通過getBean的?法獲取實例
-
繼續(xù)跟蹤下去华蜒,我們進?到了AbstractBeanFactory類的doGetBean?法载庭,這個?法中的代碼很多看彼,我們直接找到核?部分
-
接著進?到AbstractAutowireCapableBeanFactory類的?法廊佩,找到以下代碼部分
- 進?doCreateBean?法看看,該?法我們關(guān)注兩塊重點區(qū)域
-
創(chuàng)建Bean實例靖榕,此時未設(shè)置屬性
-
給Bean填充屬性标锄,調(diào)用初始化方法,應用BeanPostProcessor后置處理器
-