springboot 啟動類有兩大核心: 一個是注解@SpringBootApplication,一個是main方法里面的SpringApplication.run。
1、通過main方法 啟動springboot
2、首先進入SpringAplication類run方法
3、run方法新建SpringApplication對象
4、SpringApplication對象的run方法,首先創建並啟動計時監控類
5、接着調用getRunListeners創建所有spring監聽器
6、接着DefaultApplicationArguments初始化應用應用參數
7、接着prepareEnvironment根據運行監聽器和參數准備spring環境
8、接着調用createApplicationContext方法創建應用上下文
9、通過prepareContext准備應用上下文
10、refreshContext方法刷新上下文(通過spring ioc模板方法初始化)
11、調用stop方法停止計時監控器類
12、調用started發布應用上下文 啟動完成事件
13、callRunners方法執行所有runner運行器
14、調用running發布應用上下文就緒事件
15、最后返回應用上下文
@SpringBootApplication包括三個注解和四個元注解:
元注解是指注解的注解,Java中有:
① @Retention: 定義注解的保留策略
② @Target:定義注解的作用目標
③ @Document:說明該注解將被包含在javadoc中
④ @Inherited:說明子類可以繼承父類中的該注解
1、@EnableAutoConfiguration:SpringBoot根據應用所聲明的依賴來對Spring框架進行自動配置。是借助@Import將所有符合自動配置條件的bean定義加載到IoC容器。
2、@SprinbootConfiguration:它是JavaConfig形式的Spring IOC容器的配置類。被標注的類類似於在spring的XML配置文件中(applicationContext.xml),裝配所有bean事務,提供了一個spring的上下文環境。
3、@ComponentScan:組件掃描,可自動發現和裝配Bean,@ComponentScan進行package進行掃描。
4、關於java元注解:
① @Retention: 定義注解的保留策略
② @Target:定義注解的作用目標
③ @Document:說明該注解將被包含在javadoc中
④ @Inherited:說明子類可以繼承父類中的該注解
springboot執行流程UML圖
springboot執行流程
1、springboot 開始啟動(main方法)
2、new Springpplication()構造一個Spring應用
(1)、配置source
(2)、配置是否web環境
(3)、創建初始化構造器
(4)、創建應用監聽器
(5)、配置主方法所在類
3、SpringApplication啟動此應用
4、啟動計時器和監聽器(HeadLess模式配置)
(1)、啟動監聽模塊
1)、啟動
2)、監聽
a、環境配置
b、應用上下文
3)、結束
(2)、啟動環境模塊
1)、創建配置環境
2)、加載屬性文件資源
3)、配置監聽
(3)、Beanner配置
(4)、啟動應用程序上下文
1)、創建應用上下文
2)、基本屬性配置
a、加載環境配置
b、資源加載器
c、配置監聽
d、加載啟動參數
3)、更新應用程序上下文
a、准備所需環境bean的工廠
b、通過工廠生產bean,通過stop停止計時器和監聽器,SpringApplication啟動結束
5、通過2.2和2.3獲取的構造器監聽器和4.4.3.a獲取的工廠對象得到工廠集合
6、獲取工廠類名和類加載器
7、通過類加載器獲取spring.factories文件
8、獲取工廠類的全路徑
9、通過類路徑反射獲得工廠的class對象、構造方法。
10、生成工廠類實例返回