<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SpringApplication.run(xxx.class, args)背后的東東——整體脈絡

      從spring到springmvc,再到springboot、springcloud,應用程序api開發調用方面都已經非常熟悉,但對spring背后的擴展機制:為何一個簡單的main方法可以實現這么強大的功能,以及與第三方應用如何完美集成?帶著這些疑問,了解下springboot背后的整體脈絡。

       

      大家都知道,對spring的擴展一般有三種方式:@import注解,實現ImportSeletor,以及實現ImportBeanDefinitionRegistrar接口,所以其實主要搞明白springboot底層是如何支持這三種方式就可以了。

       

      首先,run方法執行時,會實例化spring容器,其實根據不同的環境實例化不同的容器類

      context = createApplicationContext();
      

        servlet環境是實例化AnnotationConfigServletWebServerApplicationContext類,這里最重要是注冊一些內置的BeanDefinitionRegistryPostProcessor(BeanFactoryPostProcessor的子接口),其中就包含重要ConfigurationClassPostProcessor,spring還特意為這種beandefinition取了beanname,如:org.springframework.context.annotation.internalConfigurationAnnotationProcessor。這里有必要解釋下beandefinition,這個類個人認為是spring最重要的,spring容器管理的對象是我們創建的普通bean,但spring在創建之前,對這種bean用beandefinition進行了包裝和描述,進而可以在不同的擴展點去擴展bean的功能,底層是通過實現beanpostprocessor接口,同理咱們還可以實現beanfactorypostprocessor接口去擴展beandefinition,這也是spring設計的巧妙之處。

       

      實例化工作完成之后會調用spring刷新容器的方法

      org.springframework.context.support.AbstractApplicationContext#refresh
      

        接下來工作其實無非就是在哪個時機對剛剛spring進行注冊的beanfactorypostprocessor進行調用的問題,spring底層是委托PostProcessorRegistrationDelegate進行處理的。

      org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors
      

        最后就是回調ConfigurationClassPostProcessor等方法了

      org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
      

        @Import就是通過以下方法處理,將其配置信息解析出來

      org.springframework.context.annotation.ConfigurationClassParser#processImports
      

        最后,將其注冊到spring的BeanDefinitionRegistry中,整個擴展過程就完成了,剩下的就是spring如何根據beandefinition去實例化bean了。

      org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#registerBeanDefinitionForImportedConfigurationClass
      

           

       回到最開始的問題,spring既然可以通過BeanDefinitionRegistryPostProcessor去動態的擴展beandefinition來實例化bean,那我們就可以利用這個擴展機制來集成第三方的工具到spring中,利用容器來管理這些bean,比如mybatis就是通過MapperScannerConfigurer來和spring整合的。

      posted @ 2020-10-30 21:13  abingtech  閱讀(1697)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 57pao成人国产永久免费视频| 亚洲精品区午夜亚洲精品区| 国产欧美精品区一区二区三区| 日本大片在线看黄a∨免费| 日本狂喷奶水在线播放212| 在线天堂新版资源www在线下载| 国产精品成人va在线播放| 国产日韩乱码精品一区二区| 无码人妻丝袜在线视频| 夜爽8888视频在线观看| 久久国产免费直播| 丰满人妻熟妇乱又仑精品| 少妇被粗大的猛烈进出69影院一| 亚洲另类激情专区小说图片| japan黑人极大黑炮| 成人欧美日韩一区二区三区| 国产自产av一区二区三区性色| 久久国产成人高清精品亚洲| 中文有无人妻VS无码人妻激烈| 亚洲色大成网站WWW久久| 亚洲人成网站观看在线观看| 97精品伊人久久大香线蕉APP | 亚洲熟妇自偷自拍另类| 色橹橹欧美在线观看视频高清| 国产一区二区三区无遮挡| 被拉到野外强要好爽| 国产女精品视频网站免费| 国产粉嫩一区二区三区av| 国产成人午夜精品福利| 欧美xxxx黑人又粗又大| 国产成人精品亚洲一区二区| 亚洲中文字幕人妻系列| 亚洲欧美一区二区三区在线| 亚洲老女人区一区二视频| 国产影片AV级毛片特别刺激| 夏河县| 俄罗斯美女真人性做爰| 久久婷婷五月综合97色直播| 国产综合色在线精品| 日韩一区二区三在线观看| 亚洲日本欧洲二区精品|