當前位置:編程學習大全網 - 源碼下載 - springboot隨筆5.0:run方法執行流程

springboot隨筆5.0:run方法執行流程

初始化:

1.1 調 SpringFactoriesLoader#getSpringFactoriesInstances 方法,key為:SpringApplicationRunListener.class,並創建對應的實例。

SpringApplicationRunListener負責在springboot啟動的不同階段,廣播出不同的消息,傳遞給ApplicationListener實現類。

1.2 把1.1中獲取的監聽器對象遍歷.starting()。

應用上下文環境:就是指壹個環境的集合,包含多部分的環境信息。例如:系統信息、jdk環境信息、自定義信息等。

把所有的環境信息進行加載封裝到environment對象中,使用時候直接取。

2.1 創建並配置相應的環境;

根據應用不同,創建需要的應用環境。

2.2 根據用戶配置,配置environment系統環境;

例如:開發環境/生產環境/測試環境有不同的配置文件,加載配置文件,封裝成 SimpleCommandLinePropertySource 加入到環境中。

2.3 啟動相應的監聽器,其中有壹個重要的監聽器 configFileApplicationListener (項目配置文件的監聽器)

configFileApplicationListener 監聽器是run方法初始化中第二滴根據ApplicationListener.class獲取的監聽器中的壹個

應用上下文:當前環境的屬性集合 ;

可以理解成IoC容器的高級表現形式,應用上下文確實是在IoC容器的基礎上豐富了壹

些高級功能。

應用上下文對IoC容器是持有的關系。他的壹個屬性beanFactory就是IoC容器

(DefaultListableBeanFactory)。所以他們之間是持有,和擴展的關系。

返回值賦值給開始定義的ConfigurableApplicationContext

在createApplicationContext()方法中的,BeanUtils.instantiateClass(contextClass) 這個方法中,不但初始化了AnnotationConfigServletWebServerApplicationContext類,也就是我們的上下文context,同樣

也觸發了GenericApplicationContext類的構造函數,從而IoC容器也創建了。

看他的構造函數,發現壹個很熟悉的類DefaultListableBeanFactory(是IoC容器)

這步的核心就是對第三步獲得的上下文對象進行屬性的設置和壹些bean對象的創建。例如我們的核心啟動類。

SpringBoot中有三種實現定位,

所謂的載入就是通過上面的定位得到的basePackage,SpringBoot會將該路徑拼接成:

classpath:com/lidongz/**/.class這樣的形式,然後壹個叫做

xPathMatchingResourcePatternResolver的類會將該路徑下所有的.class文件都加載進來,然後遍歷判斷是不是有@Component註解,如果有的話,就是我們要裝載的BeanDefinition.

通過基礎路徑的掃描,確定@Import註解需要加載的類,調用類中的方法 從 META-INF/spring.factories 中獲取的全路徑類名,完成BeanDefinition的加載和註冊。

獲取到的權限定類名中有標註的@bean的方法也會執行,從而再創建壹些bean對象存到容器中。

怎麽掃描啟動類上的解析、

compenentScan不配置路徑為什麽會是核心類所在的包以及子包

解析compenentScan註解的時候 如果值為null 給壹個值就是核心類所在的包,然後doscan掃描就是以這個為基礎路徑

  • 上一篇:為什麽內核中無法使用NtQueueApcThread
  • 下一篇:跪求用MATLAB編寫的關於小波變換數字圖像數字邊緣提取的程序
  • copyright 2024編程學習大全網