Context 初始化流程

2022-03-09 18:47:50 字數 1147 閱讀 5286

如下圖所示,左側是三種型別的 context:

首先對重新整理進行準備,包括設定開始時間、設定啟用狀態、初始化 context 環境中的佔位符,這個動作根據子類的需求由子類來執行,然後驗證是否缺失必要的 properties。

重新整理並獲得內部的 bean factory。

對 beanfactory 進行準備工作,比如設定類載入器和後置處理器、配置不進行自動裝配的型別、註冊預設的環境 bean。

為 context 的子類提供後置處理 beanfactory 的擴充套件能力。如果子類想在 bean 定義載入完成後,開始初始化上下文之前做一些特殊邏輯,可以複寫這個方法。

執行 context 中註冊的 bean factory 字尾處理器。這裡有兩種後置處理器,一種是可以註冊 bean 的字尾處理器,另一種是針對 beanfactory 進行處理的後置處理器。執行的順序是,先按優先順序執行可註冊 bean 的處理器,在按優先順序執行針對 beanfactory的處理器。對 spring boot 來說,這一步會進行註解 bean definition 的解析。流程如圖右側所示,由 configurationclasspostprocessor 觸發、由 classpathbeandefinitionscanner 解析並註冊到 beanfactory。

按優先順序順序在 beanfactory 中註冊  bean的字尾處理器,bean 後置處理器可以在 bean 初始化前、後執行處理。

初始化訊息源,訊息源用來支援訊息的國際化。

是留給子類的擴充套件步驟,用來讓特定的 context 子類初始化其他的 bean。

凍結所有 bean 描述資訊的修改,例項化非延遲載入的單例 bean。

完成上下文的重新整理工作,呼叫 lifecycleprocessor 的 onfresh() 方法以及發布 contextrefreshedevent 事件。

在 finally 中,執行第十三步,重置公共的快取,比如 reflectionutils 中的快取、 annotationutils 中的快取等等;

至此,spring 的 context 初始化完成。由於篇幅和時間的關係,這裡介紹了最主要的主流程,建議課後閱讀原始碼來複習這個知識點,補全細節。

內容來自:

MTK Phonebook初始化流程

開機之後,初始化時,設定如下三個ps訊息cback函式 initializeall mmi phb init protocol setprotocoleventhandler mmi phb ind startup finish,prt phb startup finish ind setproto...

SD初始化流程

sd初始化流程 當host上電後,使所有的卡裝置處於卡識別模式,完成設定有效操作電壓範圍,卡識別和請求卡相對位址等操作。1 傳送指令cmd0使卡裝置處於idle狀態 2 傳送指令cmd8,如果卡裝置有response,說明此卡為sd2.0以上 3 傳送指令cmd55 acmd41,該指令是用來探測卡...

suricata初始化流程

suricata是一款高效能的ids ips和網路安全監測引擎。採用多執行緒模式,利用多核優勢。支援多種協議 例如ip4 ip6 tcp udp http ftp pop3等協議。可以動態載入過濾規則。1 呼叫runmoderegisterrunmodes函式註冊執行模式 runmodeidspca...