refresh() 1. prepareRefresh() 刷新預處理 1. 設置容器狀態為 active 2. 初始化屬性配置,空方法,可以重寫這個方法來自定義屬性 3. 屬性配置校驗,也是空的 4. 緩存容器中早期事件監聽器 2. obtainFreshBeanFactory() 獲取 Bean ...
refresh()
1. prepareRefresh()
刷新預處理
- 設置容器狀態為 active
- 初始化屬性配置,空方法,可以重寫這個方法來自定義屬性
- 屬性配置校驗,也是空的
- 緩存容器中早期事件監聽器
2. obtainFreshBeanFactory()
獲取 BeanFactory
- 創建 DefaultListableBeanFactory,並設置 serializationId
- 返回上一步創建的 BeanFactory,此時只有一些預設的配置
3. prepareBeanFactory(beanFactory)
BeanFactory 預準備
- 設置 BeanFactory 的類載入器、表達式解析器等
- 添加 BeanPostProcessor
- 忽略指定的自動裝配依賴介面
- 註冊能夠自動裝配的組件、預設的環境配置等
4. postProcessBeanFactory(beanFactory);
可以重寫這個方法來在 BeanFactory 準備完成後執行一些操作
5. invokeBeanFactoryPostProcessors(beanFactory);
執行 BeanDefinitionRegistryPostProcessor、BeanFactoryPostProcessor。Spring 後置處理器源碼
6. registerBeanPostProcessors(beanFactory);
執行 BeanPostProcessor。Spring 後置處理器源碼
7. initMessageSource();
初始化 MessageSource,用於國際化配置等
- 從容器獲取 MessageSource 組件
- 如果容器中不存在,則預設設置為 DelegatingMessageSource
8. initApplicationEventMulticaster();
初始化事件派發器。Spring事件監聽器源碼
9. onRefresh();
可以重寫這個方法來在容器刷新時執行一些操作
10. registerListeners();
添加 ApplicationListener 監聽器。Spring事件監聽器源碼
11. finishBeanFactoryInitialization(beanFactory);
- 初始化剩餘的非懶載入單例 Bean。Spring 後置處理器源碼
- 添加 @EventListener 監聽器。Spring事件監聽器源碼
12. finishRefresh();
刷新完成,給監聽器發佈事件。Spring事件監聽器源碼