最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的Context你真的懂了嗎

 更新時間:2019年08月27日 10:29:16   作者:Java知其所以然  
這篇文章主要給大家介紹了關于Spring中Context的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

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

1. context 是什么

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

在計算機系統(tǒng)中,進程執(zhí)行時有進程上下文,如果進程在執(zhí)行的過程中遇到了中斷,CPU 會從用戶態(tài)切換為內核態(tài)(當然這個過程用戶進程是感知不到的,由硬件來實現(xiàn)的),此時進程處于的進程上下文會被切換到中斷上下文中,從而可以根據中斷號去執(zhí)行相應的中斷程序。

通過上面這個例子我們可以發(fā)現(xiàn),進程在執(zhí)行程序(不管是用戶程序,還是內核中的中斷程序)時,都會依賴一個上下文,這個上下文由多種數(shù)據結構組成,可以提供我們運行時需要的一些數(shù)據和保存運行時的一些數(shù)據。那其實 context 就可以理解對一個程序運行時所需要的一些數(shù)據結構的抽象表達唄。

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

2. spring context 是什么

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

3. spring context 包括什么

主要包括:

  • DefaultListableBeanFactory
    這就是大家常說的 ioc 容器,它里面有很多 map、list。spring 幫我們創(chuàng)建的 singleton 類型的 bean 就存放在其中一個 map 中。我們定義的監(jiān)聽器(ApplicationListener)也被放到一個 Set 集合中。
  • BeanDefinitionRegistry
    把一個 BeanDefinition 放到 beanDefinitionMap。
  • AnnotatedBeanDefinitionReader
    針對 AnnotationConfigApplicationContext 而言。一個 BeanDefinition 讀取器。
  • 擴展點集合
    存放 spring 擴展點(主要是 BeanFactoryPostProcessor、BeanPostProcessor)接口的 list 集合。

4. spring context 的生命周期

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

 public static void main(String[] args) {
  // 初始化和啟動
  AnnotationConfigApplicationContext acaContext = new AnnotationConfigApplicationContext(AppConfig.class);
  // 運行
  acaContext.getBean(ServiceA.class);
  // 關閉/銷毀
  acaContext.close();
 }

4.1 初始化和啟動

我們平時常說的spring 啟動其實就是調用 AbstractApplicationContext#refresh 完成 spring context 的初始化和啟動過程。spring context 初始化從開始到最后結束以及啟動,這整個過程都在 refresh 這個方法中。refresh 方法剛開始做的是一些 spring context 的準備工作,也就是 spring context 的初始化,比如:創(chuàng)建 BeanFactory、注冊 BeanFactoryPostProcessor 等,只有等這些準備工作做好以后才去開始 spring context 的啟動。

與現(xiàn)實生活聯(lián)系一下,你可以把初始化理解為準備原料(對應到編程中就是創(chuàng)建好一些數(shù)據結構,并為這些數(shù)據結構填充點數(shù)據進去),等準備了你才能去真正造玩偶、造東西呀(對應到編程中就是執(zhí)行算法)。在編程中數(shù)據結構與算法是分不開的也是這個道理呀,它們相互依賴并沒有嚴格的界限劃分。

4.2 運行

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

4.3 關閉/銷毀

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

5. 總結

最近又去研究了一遍 spring 源碼以及一些操作系統(tǒng)知識的復習,突然有感而發(fā),寫下這篇文章。如果大家想學習 spring 源碼和操作系統(tǒng)的話,可以下面留言,我以后會出一系列相關的文章。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • 講解Java中的基礎類庫和語言包的使用

    講解Java中的基礎類庫和語言包的使用

    這篇文章主要介紹了Java中的基礎類庫和語言包的使用,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • servlet創(chuàng)建web后端程序的示例代碼

    servlet創(chuàng)建web后端程序的示例代碼

    本文主要介紹了servlet創(chuàng)建web后端程序的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • IDEA 中 maven 的 Lifecycle 和Plugins 的區(qū)別

    IDEA 中 maven 的 Lifecycle 和Plugins&n

    IDEA 主界面右側 Maven 標簽欄有同樣的命令,比如 install,既在 Plugins 中存在,也在 Lifecycle中存在,到底選哪個?二者又有什么區(qū)別呢?下面小編給大家介紹下IDEA 中 maven 的 Lifecycle 和Plugins 的區(qū)別,感興趣的朋友一起看看吧
    2023-03-03
  • java中throws實例用法詳解

    java中throws實例用法詳解

    在本篇文章里小編給大家分享了一篇關于java中throws實例用法詳解,有興趣的朋友們可以參考學習下。
    2021-01-01
  • 淺談java8中map的新方法--replace

    淺談java8中map的新方法--replace

    下面小編就為大家?guī)硪黄獪\談java8中map的新方法--replace。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • SpringBoot 靜態(tài)資源導入及首頁設置問題

    SpringBoot 靜態(tài)資源導入及首頁設置問題

    本節(jié)了解一下 SpringBoot 中 Web 開發(fā)的靜態(tài)資源導入和首頁設置,對應 SpringBoot-03-Web 項目,本節(jié)主要是從源碼的角度,研究了一下靜態(tài)資源導入和首頁設置的問題
    2021-09-09
  • Java虛擬機裝載和初始化一個class類代碼解析

    Java虛擬機裝載和初始化一個class類代碼解析

    這篇文章的主要內容是Java虛擬機裝載和初始化一個class類的代碼解析,包括介紹了裝載和初始化的時機與方式,需要的朋友可以參考下。
    2017-09-09
  • springboot執(zhí)行延時任務之DelayQueue實例

    springboot執(zhí)行延時任務之DelayQueue實例

    這篇文章主要介紹了springboot執(zhí)行延時任務之DelayQueue實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • java的四種常用輸入方法你會幾種

    java的四種常用輸入方法你會幾種

    這篇文章主要介紹了java四種常用輸入方法的相關資料,分別是Scanner、System、命令行和JOptionPane,每種方法都有其特點和適用場景,文中提供了詳細的代碼示例,需要的朋友可以參考下
    2025-03-03
  • SpringBoot中通過實現(xiàn)WebMvcConfigurer參數(shù)校驗的方法示例

    SpringBoot中通過實現(xiàn)WebMvcConfigurer參數(shù)校驗的方法示例

    這篇文章主要介紹了SpringBoot中通過實現(xiàn)WebMvcConfigurer參數(shù)校驗的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11

最新評論

翼城县| 连云港市| 大新县| 军事| 肇东市| 谷城县| 岳阳市| 乡城县| 五莲县| 高陵县| 泰顺县| 福鼎市| 蓝田县| 盐边县| 磐安县| 安塞县| 疏附县| 沧州市| 开江县| 宁蒗| 平远县| 安康市| 新巴尔虎左旗| 东莞市| 昆明市| 永宁县| 万宁市| 遂宁市| 张家界市| 无锡市| 黄骅市| 兴业县| 元谋县| 大埔县| 武强县| 长子县| 凌海市| 洛隆县| 绥江县| 阿巴嘎旗| 庐江县|