真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

前言
開心一刻

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

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

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

github:https://github.com/youzhibing

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

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

主要做了兩件事:

1、推測應(yīng)用類型

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

應(yīng)用類型有三種:NONE、SERVLET、REACTIVE,NONO表示普通的java應(yīng)用,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、準(zhǔn)備好運行時監(jiān)聽器:EventPublishingRunListener,并過濾出于與ApplicationStartingEvent匹配的監(jiān)聽器

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

LoggingApplicationListener

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

BackgroundPreinitializer

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

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

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

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

2、廣播ApplicationEnvironmentPreparedEvent事件,觸發(fā)相應(yīng)的監(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、實例化應(yīng)用上下文

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

2、實例化AnnotatedBeanDefinitionReader、ClassPathBeanDefinitionScanner和DefaultListableBeanFactory

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

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

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

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

1、將SpringApplication中的部分屬性應(yīng)用到上下文中

SpringApplication中的environment、initializers、listeners應(yīng)用到spring上下文中

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

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

3、加載資源

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

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

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

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

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

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

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

回到頂部
三個事件
ApplicationStartingEvent

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

ApplicationEnvironmentPreparedEvent

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

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

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

關(guān)于事件機制,可到此處查看更多詳情

回到頂部
三個核心
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方法引導(dǎo)和啟動Spring應(yīng)用程序。其實給我印象最深的還是從spring.factories加載一系列的類,包括Initializer、ApplicationListener、AutoConfigure、Failure analyzers等等,springboot的自動配置,從此時已經(jīng)開始了,一系列的AutoConfigure都是從spring.factories獲取的。
environment:StandardServletEnvironment

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

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

ApplicationContext:AnnotationConfigServletWebServerApplicationContext

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

1、訪問應(yīng)用程序組件的Bean工廠方法

2、加載文件資源的能力

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

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

等等一系列的功能

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

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


網(wǎng)站名稱:spring-boot-2.0.3不一樣系列之源碼篇-階段總結(jié)-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://weahome.cn/article/jgioe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部