成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

spring-boot-2.0.3不一樣系列之源碼篇-階段總結-創(chuàng)新互聯(lián)

前言
開心一刻

成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站建設、網(wǎng)站制作與策劃設計,黔西網(wǎng)站建設哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設十年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:黔西等地區(qū)。黔西做網(wǎng)站價格咨詢:028-86922220

朋友喜歡去×××,第一次推門進來的是一個學生美眉,感覺還不錯;后來經(jīng)常去,有時是護士,有時是空姐,有時候是教師。昨天晚上推門進去的是一個女警察,長得賊好看,身材也很好,朋友嗷的一聲就撲上去了。然后他就被抓起來了,罪名是:×××、襲警、強奸未遂。

路漫漫其修遠兮,吾將上下而求索!

github:https://github.com/youzhibing

碼云(gitee):https://gitee.com/youzhibing

回到頂部
前情回顧
springboot2.3源碼篇之SpringApplication的構造方法

主要做了兩件事:

1、推測應用類型

根據(jù)類路徑下是否存在指定類型的類來斷定應用類型;

應用類型有三種:NONE、SERVLET、REACTIVE,NONO表示普通的java應用,SERVLET表示基于servlet 的web工程,REACTIVE表示 reactive web application(還沒去了解,囧...)

2、獲取ApplicationContextInitializer、ApplicationListener實例

查找類路徑下全部的META-INF/spring.factories的URL(spring.factories文件的路徑),并加載所有spring.factories中的內(nèi)容(包括各種Initializer、ApplicationListener、AutoConfigure、Failure analyzers等)到SpringFactoriesLoader的cache中;

然后從緩存中獲取ApplicationContextInitializer、ApplicationListener類型的類并進行實例化,然后將得到的實例化集合分別賦值給SpringApplication的initializers和listeners

springboot2.3源碼篇之run方法(一):SpringApplicationRunListener

主要做了兩件事:

1、準備好運行時監(jiān)聽器:EventPublishingRunListener,并過濾出于與ApplicationStartingEvent匹配的監(jiān)聽器

2、廣播ApplicationStartingEvent事件,觸發(fā)對應的事件監(jiān)聽器

LoggingApplicationListener

檢測正在使用的日志系統(tǒng)

BackgroundPreinitializer

另起一個后臺線程執(zhí)行耗時的初始化

springboot2.3源碼篇之run方法(二):prepareEnvironment方法

1、獲取或創(chuàng)建環(huán)境

根據(jù)SpringApplication構造方法中推斷出的應用類型創(chuàng)建對應的環(huán)境,一般而言是web環(huán)境:StandardServletEnvironment

2、廣播ApplicationEnvironmentPreparedEvent事件,觸發(fā)相應的監(jiān)聽器

ConfigFileApplicationListener

添加名叫random的RandomValuePropertySource到environment

添加名叫applicationConfig:[classpath:/application.yml]的OriginTrackedMapPropertySource到environment

LoggingApplicationListener

初始化日志系統(tǒng)

3、加載外部化配置的資源到environment

包括命令行參數(shù)、servletConfigInitParams、servletContextInitParams、systemProperties、sytemEnvironment、random、application.yml(.yaml/.xml/.properties)等

springboot2.3源碼篇之run方法(三):createApplicationContext方法

1、實例化應用上下文

應用類型有三種,對應的上下文也有三種,NONE -> AnnotationConfigApplicationContext,SERVLET -> AnnotationConfigServletWebServerApplicationContext,REACTIVE -> AnnotationConfigReactiveWebServerApplicationContext;一般而言,創(chuàng)建的是AnnotationConfigServletWebServerApplicationContext。

2、實例化AnnotatedBeanDefinitionReader、ClassPathBeanDefinitionScanner和DefaultListableBeanFactory

AnnotatedBeanDefinitionReader是注解bean定義讀取器,用于編程式注解bean的注冊;ClassPathBeanDefinitionScanner是類路徑bean定義掃描器,用于檢測類路徑上的bean候選者。

AnnotatedBeanDefinitionReade用來加載class類型的配置,在它初始化的時候,會預先注冊一些BeanPostProcessor和BeanFactoryPostProcessor,這些處理器會在接下來的spring初始化流程中被調(diào)用。ClassPathBeanDefinitionScanner是一個掃描指定類路徑中注解Bean定義的掃描器,在它初始化的時候,會初始化一些需要被掃描的注解。

DefaultListableBeanFactory,也就是我們所說的beanFactory,用來注冊所有bean定義(bean definitions),也可以用來作為單例bean工廠。

springboot2.3源碼篇之run方法(四):prepareContext方法

1、將SpringApplication中的部分屬性應用到上下文中

SpringApplication中的environment、initializers、listeners應用到spring上下文中

2、廣播ApplicationPreparedEvent事件,觸發(fā)對應的事件監(jiān)聽器

向context的beanFactoryPostProcessors中注冊了一個PropertySourceOrderingPostProcessor實例
向beanFactory中注冊了一個名叫springBootLoggingSystem的單例bean,也就是我們的日志系統(tǒng)bean

3、加載資源

支持4種方式:Class、Resource、Package和CharSequence。

Class:注解形式的Bean定義;AnnotatedBeanDefinitionReader負責處理。

Resource:一般而言指的是xml bean配置文件,也就是我們在spring中常用的xml配置。說的簡單點就是:將xml的bean定義封裝成BeanDefinition并注冊到beanFactory的BeanDefinitionMap中;XmlBeanDefinitionReader負責處理。

Package:以掃包的方式掃描bean定義; ClassPathBeanDefinitionScanner負責處理。

CharSequence:以先后順序進行匹配Class、Resource或Package進行加載,誰匹配上了就用誰的處理方式處理。

springboot鼓勵用java類實現(xiàn)java bean定義,所以springboot應用中,我們一般只需要關注Class方式、Package方式即可。

context中主要是三個屬性增加了內(nèi)容:beanFactory、beanFactoryPostProcessors和applicationListeners

回到頂部
三個事件
ApplicationStartingEvent

在監(jiān)聽器注冊完、SpringApplication構造完后,以及其他的任何處理之前被廣播,觸發(fā)對應的事件監(jiān)聽器

ApplicationEnvironmentPreparedEvent

environment創(chuàng)建后,context創(chuàng)建之前被廣播,觸發(fā)對應的事件監(jiān)聽器
ApplicationPreparedEvent

bean定義加載后,上下文refresh之前被廣播,觸發(fā)對應的事件監(jiān)聽器

后續(xù)還會涉及到ApplicationReadyEvent、ApplicationFailedEvent事件,后續(xù)再詳解

關于事件機制,可到此處查看更多詳情

回到頂部
三個核心
SpringApplication

springboot的特性之一,內(nèi)容如下    

23. SpringApplication
23.1. Startup Failure
23.2. Customizing the Banner
23.3. Customizing SpringApplication
23.4. Fluent Builder API
23.5. Application Events and Listeners
23.6. Web Environment
23.7. Accessing Application Arguments
23.8. Using the ApplicationRunner or CommandLineRunner
23.9. Application Exit
23.10. Admin Features

也是springboot中比較重要的特性之一,用于從java main方法引導和啟動Spring應用程序。其實給我印象最深的還是從spring.factories加載一系列的類,包括Initializer、ApplicationListener、AutoConfigure、Failure analyzers等等,springboot的自動配置,從此時已經(jīng)開始了,一系列的AutoConfigure都是從spring.factories獲取的。
environment:StandardServletEnvironment

表示當前應用程序所處的環(huán)境,主要包括兩方面:profiles和properties;例如我們經(jīng)常說的本地、運測、預發(fā)布、生產(chǎn)環(huán)境,就可以通過environment進行配置,以及是否是web環(huán)境。

一般而言,我們的環(huán)境是StandardServletEnvironment,標準的servlet環(huán)境,也就是我們經(jīng)常說的web環(huán)境

ApplicationContext:AnnotationConfigServletWebServerApplicationContext

應用上下文,用于為應用程序提供配置的中央接口,提供如下內(nèi)容:

1、訪問應用程序組件的Bean工廠方法

2、加載文件資源的能力

3、發(fā)布事件到已注冊的事件監(jiān)聽器的能力

4、解析消息,支持國際化的能力

等等一系列的功能

AnnotationConfigServletWebServerApplicationContext是springboot對spring應用上下文的拓展,引入了一些springboot的內(nèi)容。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章題目:spring-boot-2.0.3不一樣系列之源碼篇-階段總結-創(chuàng)新互聯(lián)
本文URL:http://jinyejixie.com/article4/jgioe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設、品牌網(wǎng)站制作、GoogleApp設計、標簽優(yōu)化、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設
安庆市| 安岳县| 烟台市| 清镇市| 临泽县| 莎车县| 紫云| 花莲县| 鲜城| 清水河县| 闵行区| 大城县| 自贡市| 乐清市| 富蕴县| 涟源市| 湖口县| 民丰县| 会东县| 平谷区| 博爱县| 南江县| 综艺| 衡阳市| 元朗区| 长兴县| 确山县| 若尔盖县| 灯塔市| 赤水市| 栖霞市| 浮梁县| 崇仁县| 甘孜县| 冕宁县| 古丈县| 武川县| 岐山县| 闽侯县| 乌拉特中旗| 咸丰县|