亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中的Context你真的懂了嗎

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

前言

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

1. context 是什么

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

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

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

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

2. spring context 是什么

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

3. spring context 包括什么

主要包括:

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

4. spring context 的生命周期

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

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

4.1 初始化和啟動(dòng)

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

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

4.2 運(yùn)行

spring context 啟動(dòng)后可以提供它的服務(wù)的這段時(shí)間。

4.3 關(guān)閉/銷毀

不需要用 spring context ,關(guān)閉它時(shí),其實(shí)對(duì)應(yīng)到代碼上就是 acaContext.close();

5. 總結(jié)

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

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • java自帶的四種線程池實(shí)例詳解

    java自帶的四種線程池實(shí)例詳解

    java線程的創(chuàng)建非常昂貴,需要JVM和OS(操作系統(tǒng))互相配合完成大量的工作,下面這篇文章主要給大家介紹了關(guān)于java自帶的四種線程池的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • SpringBoot3整合MyBatis出現(xiàn)異常:Property?'sqlSessionFactory'or?'sqlSessionTemplate'?are?required

    SpringBoot3整合MyBatis出現(xiàn)異常:Property?'sqlSessionFactory&a

    這篇文章主要介紹了SpringBoot3整合MyBatis報(bào)錯(cuò):Property?‘sqlSessionFactory‘?or?‘sqlSessionTemplate‘?are?required,其實(shí)不是個(gè)大問題,只是自己編碼時(shí)遇到了,然后總結(jié)總結(jié)分享一下,如果有遇到類似問題的,可以參考一下
    2022-11-11
  • SpringMVC的執(zhí)行過程淺析

    SpringMVC的執(zhí)行過程淺析

    這篇文章主要給大家介紹了關(guān)于SpringMVC的執(zhí)行過程的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用SpringMVC具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Spring Cloud使用Feign實(shí)現(xiàn)Form表單提交的示例

    Spring Cloud使用Feign實(shí)現(xiàn)Form表單提交的示例

    本篇文章主要介紹了Spring Cloud使用Feign實(shí)現(xiàn)Form表單提交的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • StringUtils里的isEmpty方法和isBlank方法的區(qū)別詳解

    StringUtils里的isEmpty方法和isBlank方法的區(qū)別詳解

    這篇文章主要介紹了StringUtils里的isEmpty方法和isBlank方法的區(qū)別詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2020-04-04
  • Java中map和flatMap的區(qū)別舉例詳解

    Java中map和flatMap的區(qū)別舉例詳解

    這篇文章主要給大家介紹了關(guān)于Java中map和flatMap區(qū)別的相關(guān)資料,在Java中Stream接口有map()和flatmap()方法,兩者都有中間流操作,并返回另一個(gè)流作為方法輸出,需要的朋友可以參考下
    2023-10-10
  • JVM的常用命令匯總

    JVM的常用命令匯總

    監(jiān)測(cè)java應(yīng)用,最方便的就是直接使用jdk提供的現(xiàn)成工具,在jdk的安裝的bin目錄下,已經(jīng)提供了多種命令行監(jiān)測(cè)工具。本文為大家總結(jié)了幾個(gè)JVM的常用命令,需要的可以參考一下
    2022-10-10
  • SpringBoot中實(shí)現(xiàn)異步調(diào)用@Async詳解

    SpringBoot中實(shí)現(xiàn)異步調(diào)用@Async詳解

    這篇文章主要介紹了SpringBoot中實(shí)現(xiàn)異步調(diào)用@Async詳解,在SpringBoot的日常開發(fā)中,一般都是同步調(diào)用的,但實(shí)際中有很多場(chǎng)景非常適合使用異步來處理,需要的朋友可以參考下
    2024-01-01
  • Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實(shí)例代碼

    Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實(shí)例代碼

    這篇文章主要介紹了Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實(shí)例代碼,涉及使用辛普森積分的例子,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • Spring gateway配置Spring Security實(shí)現(xiàn)統(tǒng)一權(quán)限驗(yàn)證與授權(quán)示例源碼

    Spring gateway配置Spring Security實(shí)現(xiàn)統(tǒng)一權(quán)限驗(yàn)證與授權(quán)示例源碼

    這篇文章主要介紹了Spring gateway配置Spring Security實(shí)現(xiàn)統(tǒng)一權(quán)限驗(yàn)證與授權(quán),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論