中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中的refresh方法怎么用

發布時間:2022-05-05 10:36:59 來源:億速云 閱讀:204 作者:iii 欄目:開發技術

這篇文章主要介紹“Spring中的refresh方法怎么用”,在日常操作中,相信很多人在Spring中的refresh方法怎么用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring中的refresh方法怎么用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1 前言

了解原理性的一些內容之后就會在應用能夠得心應手,在項目開發和面試中,就能很好地 battle 和 show muscle。

2 源碼入口哪里找

Spring 的源碼閱讀,需要找到入口文件,一般情況下在 Spring 項目中,由 tomcat 容器啟動后加載項目中設置的 web.xml,在改文件中添加項目的配置文件,監聽器等內容,其中 DispatcherServlet 尤為重要,其 onRefresh 方法就是其核心操作。不過隨著 springboot 的誕生,配置化的思想成型后,獲取源碼的入口就相對簡單了,核心需要關注 AbstractApplicationContext.refresh

獲取方法的入口常見的如下所示:

# 通過配置文件來讀取
ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("bean.xml");
# 通過配置類來加載
AnnotationConfigApplicationContext ct = new AnnotationConfigApplicationContext(MainConfig.class);
# 兩者都是AbstractApplicationContext 的子類
AbstractApplicationContext

如下圖所示,通過配置文件來加載的 ClassPathXmlApplicationContext 是在構造方法中調用了其父類的 refresh 方法,這個方法就是核心,就是大家都知道的 AbstractApplicationContext.refresh() 。

Spring中的refresh方法怎么用

3 refresh 核心方法

關于源碼的閱讀,因其復雜的文件結構,在梳理其結構時,需要抓大放小,不宜深入細節,否則就容易迷路,不記得來時的路了。下圖便是核心方法 AbstractApplicationContext.refresh

Spring中的refresh方法怎么用

對于 refresh 方法主要分為以下核心的 12 個方法:

  • prepareRefresh() 刷新前的預處理,調用 initPropertySources() 方法初始化一些屬性設置,調用 getEnvironment().validateRequiredProperties() 校驗屬性的合法性,設置 earlyApplicationEvents= new LinkedHashSet() 保存容器中較早期的事件。

  • obtainFreshBeanFactory() 獲取 BeanFactory,創建一個刷新的 Bean 工廠,refreshBeanFactory() 并設置容器 ID,然后將創建的 DefaultListableBeanFactory 的對象進行返回。

  • prepareBeanFactory(beanFactory) BeanFactory 的預準備工作,設置 BeanFactory 的類加載器和表達式解析器,并添加 BeanPostProcessor【ApplicationContextAwareProcessor】,設置自動裝配的接口,添加 BeanPostProcessor。

  • postProcessBeanFactory(beanFactory) BeanFactory 準備工作完成后進行的后置處理工作,子類通過重寫這個方法來做進一步的設置。

  • invokeBeanFactoryPostProcessors(beanFactory) 執行 BeanFactoryPostProcessor 和 BeanFactory 方法的后置處理器。在 BeanFactory 標準初始化之后執行 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor。先執行 BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry 方法,按照 PriorityOrdered 、Ordered 和其它未設置優先級來執行,然后按照同樣的優先級來執行 BeanFactoryPostProcessor.postProcessBeanFactory 方法。

  • registerBeanPostProcessors(beanFactory) 注冊 BeanPostProcessor(Bean 的后置處理器),不同接口類型的 BeanPostProcessor 在 Bean 創建前后的執行時機是不一樣的。

  • initMessageSource() 初始化 MessageSource 組件, 做國際化功能、消息綁定、消息解析等。

  • initApplicationEventMulticaster() 初始化事件派發器,如果容器中沒有事件派發器,那么就創建一個 SimpleApplicationEventMulticaster 并添加到容器中。

  • onRefresh() 留給子容器(子類),例如在 springboot 中,用來創建 tomcat、jetty 容器并啟動。

  • 10 registerListeners() 給容器中將所有項目里面的 ApplicationListener 注冊進來,并將監聽器注冊到事件派發器中。

  • 11 finishBeanFactoryInitialization(beanFactory) 初始化所有剩下的單實例 bean,這個方法是核心方法,在后續的主要流程中會詳細講解。

  • 12 finishRefresh()完成 BeanFactory 的初始化創建工作,IOC 容器就創建完成。

到此,關于“Spring中的refresh方法怎么用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

军事| 务川| 渝中区| 雅江县| 山东省| 巫溪县| 长海县| 丰台区| 上思县| 磐石市| 永平县| 金溪县| 彝良县| 庆云县| 铜川市| 玉屏| 东港市| 台江县| 阿鲁科尔沁旗| 赤壁市| 潮州市| 曲阳县| 嘉义市| 清丰县| 登封市| 沙洋县| 合阳县| 禄劝| 牙克石市| 长兴县| 乌拉特中旗| 罗定市| 吉林省| 富平县| 婺源县| 姜堰市| 革吉县| 贡嘎县| 柳河县| 阿巴嘎旗| 沭阳县|