Spring Context 你真的懂了嗎

2022-07-13 15:21:12 字數 1390 閱讀 3154

今天介紹一下大家常見的乙個單詞 context 應該怎麼去理解,正確的理解它有助於我們學習 spring 以及計算機系統中的其他知識。

我們經常在程式設計中見到 context 這個單詞,當然每個人有每個人的理解,它被理解為:上下文、容器等等。我想說的是,context 理解為上下文最為合適。為什麼呢?我以乙個在計算機系統的例子來解釋一下。

在計算機系統中,程序執行時有程序上下文,如果程序在執行的過程中遇到了中斷,cpu 會從使用者態切換為核心態(當然這個過程使用者程序是感知不到的,由硬體來實現的),此時程序處於的程序上下文會被切換到中斷上下文中,從而可以根據中斷號去執行相應的中斷程式。

通過上面這個例子我們可以發現,程序在執行程式(不管是使用者程式,還是核心中的中斷程式)時,都會依賴乙個上下文,這個上下文由多種資料結構組成,可以提供我們執行時需要的一些資料和儲存執行時的一些資料。那其實 context 就可以理解對乙個程式執行時所需要的一些資料結構的抽象表達唄。

抽象是個好東西,可以更方便的表達一些東西,更好的設計系統,但大家要想進步也不能停留在抽象層面,要去探索它的真正含義,真正對應的實體。有時間和大家聊一聊抽象應該怎麼去理解。

回到 spring 中,spring 的 ioc 容器也是程式呀,那它的執行也肯定需要依賴乙個上下文。所以大家應該理解 spring context 的意思了吧。那 spring context 既然是 spring 的上下文,按照我們上面的說法上下文會對應資料結構,那 spring context 的資料結構是什麼呢?換句話說,spring context 究竟包括什麼?接下來我就把這個抽象的概念給大家對應到實打實的資料結構上。

主要包括:

beandefinitionregistry

把乙個 beandefinition 放到 beandefinitionmap。

擴充套件點集合

存放 spring 擴充套件點(主要是 beanfactorypostprocessor、beanpostprocessor)介面的 list 集合。

下面大家可以結合**這段**去理解 spring context 的生命週期。

public static void main(string args)
與現實生活聯絡一下,你可以把初始化理解為準備原料(對應到程式設計中就是建立好一些資料結構,並為這些資料結構填充點資料進去),等準備了你才能去真正造玩偶、造東西呀(對應到程式設計中就是執行演算法)。在程式設計中資料結構與演算法是分不開的也是這個道理呀,它們相互依賴並沒有嚴格的界限劃分。

spring context 啟動後可以提供它的服務的這段時間。

不需要用 spring context ,關閉它時,其實對應到**上就是 acacontext.close();

Spring context檔案報錯

exception in thread main org.springframework.beans.factory.beandefinitionstoreexception line 8 in xml document from class path resource annotationcont...

Spring context命名空間

補充 之前我們使用property標籤進行依賴注入的時候,spring框架會獲取property的name屬性,呼叫set name 對該屬性進行注入 乙個配置檔案中,需要進行管理的bean的配置有很多,為了讓spring自己去載入這些bean,實現 零配置 引入context命名空間 xmlns ...

Spring context架構 靜態結構

context也就是我們常說的spring容器,打個比方,context就像是一家公司,beans則是公司的工廠,除了工廠,公司還有翻譯,倉庫以及辦公場所等等。下面就看看context的主要構成部件。messagesource 用於國際化的介面,可以將其理解為公司的翻譯。使用者可以通過bean配置自...