簡單分析SpringBoot執行流程
SpringBoot執行流程
- springboot啟動類
該類必須在根目錄或者父包(其它元件必須位於此包的子包中)中
必須有@SpringBootApplication註解,該註解說明此類為springboot程式的啟動類,是程式的入口,
@SpringBootApplication原始碼: @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Configuration @EnableAutoConfiguration @ComponentScan public @interface SpringBootApplication { Class<?>[] exclude() default {}; String[] excludeName() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] scanBasePackages() default {}; @AliasFor attribute = "basePackageClasses") Class<?>[] scanBasePackageClasses() default {}; } |
@Configuration:表示將該類作用springboot配置檔案類。
@EnableAutoConfiguration:表示程式啟動時,自動載入springboot預設的配置。@ComponentScan:表示程式啟動是,自動掃描當前包及子包下所有類。
從原始碼中得知 @SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、
程式啟動時,會自動掃描啟動類所在包及子包中的帶有spring相關注解的元件,
- SpringBoot程式啟動流程
SpringBoot程式啟動時,啟動類的main方法是程式的入口,執行
SpringApplication.run(BootApplication.class, args);
第一個引數為啟動類的類物件,第二個為String可變引數,通常不寫。
當程式開始啟動時,在啟動類中呼叫SpringApplication的靜態run方法,此時會執行以下操作
- 首先新建一個SpringApplication物件
在SpingApplication物件的方法執行過程中
- 獲取webApplicationType 型別,當springboot應用打包方式為war包時,該型別 為SERVLET
- 注入ApplicationContextInitializer初始化器
- 設定監聽器ApplicationListener
2. 執行物件的run方法,
- 新建一個StopWatch,並啟動用於監測程式執行時間
- 獲取SpringApplicationRunListeners物件,並啟動該監聽器
- 根據啟動時傳入的引數args,新建ApplicationArguments物件
- 新建ConfigurableEnvironment物件,具體型別為StandardServletEnvironment,在其建立過程中將會載入springboot的配置檔案application.properties,同時將其繫結的SpringApplication程式中
- 建立ConfigurableApplicationContext物件context,並對該物件設定環境屬性,遍歷ApplicationContextInitializer對該物件進行初始化,
- 通過context物件獲取BeanFactory註冊applicationArguments單列
- 執行context的重新整理操作
3. 對配置的啟動類所在包及子包中的類進行掃描,對於有spring相關注解的類,通過反射為其建立代理物件,並交由spring容器管理
相關推薦
簡單分析SpringBoot執行流程
SpringBoot執行流程 springboot啟動類 該類必須在根目錄或者父包(其它元件必須位於此包的子包中)中 必須有@SpringBootApplication註解,該註解說明此類為springboot程式的啟動類,是程式的入口, @SpringBo
簡單分析springboot的原始碼
springboot的pom檔案的起步依賴以及功能依賴 每一個版本的起步依賴中,都集成了相應的一整套的功能依賴,所需要的一套依賴 springboot的起步依賴註解@SpringBootApplication簡單分析 @SpringBootApplication註解包含以下主要的
從原始碼分析AsyncTask執行流程和原理
本篇文章將從大體上分析AsyncTask的原理,不會涉及過多的細節。AsyncTask現在已經不再流行了,但作為學習還是要了解下。 使用方法 下面是AsyncTask一般的使用場景,相信使用過AsyncTask的人都不會覺得陌生 class MyAsyncTask ex
MFC單文件框架分析及執行流程(轉)
原文轉自 https://blog.csdn.net/u011619422/article/details/40402705 首先來分析一下MFC單文件類的結構: 它包括如下幾個類: CAboutDlg : 對話方塊框類,對應應用程式的“幫助”->“關於”選單,彈出“關
深度分析gevent執行流程
一直對gevent執行流程比較模糊,最近看原始碼略有所得,不敢獨享,故分享之。 gevent是一個高效能網路庫,底層是libevent,1.0版本之後是libev,核心是greenlet。gevent和eventlet是親近,唯一不同的是eventlet是自己實現的事件驅動,而gevent是
Monkey原始碼分析之執行流程
在《MonkeyRunner原始碼分析之與Android裝置通訊方式》中,我們談及到MonkeyRunner控制目標android裝置有多種方法,其中之一就是在目標機器啟動一個monkey服務來監聽指定的一個埠,然後monkeyrunner再連線上這個埠來發送命令,驅動mo
簡單分析Struts2的執行流程
客戶端向伺服器傳送一個Action的請求,執行核心過濾器(doFilter)方法。 在這個方法中,呼叫executeAction()方法,在這個方法內部呼叫dispatcher.serviceAction(); 在這個方法內部建立一個Action代理,最終執行的是Action
深入淺出Mybatis系列(十)---SQL執行流程分析(源碼篇)(轉)
factor demo 讀取配置 gist wrapper load 任性 wrap 深入淺出 轉載自:http://www.cnblogs.com/dongying/p/4142476.html 1. SqlSessionFactory 與 SqlSession. 通
yii2源碼分析之執行基本流程
yii2 php 源碼分析 用yii2框架用了將近2年,一直都沒有去看過它底層源碼, 馬上快不用了,最近對其源碼研究一番,哈哈廢話少說,上代碼,入口文件是web/index.php<?php defined('YII_DEBUG') or define('YII_
Jmeter使用流程及簡單分析監控(轉載)
轉載自:https://www.cnblogs.com/linglingyuese/archive/2013/03/04/linglingyuese-one.html#undefined 一、安裝Jmeter 1、下載Jmeter 下載地址:http://jmeter.a
SpringMVC總結-SpringMVC的執行流程以及簡單運用
SpringMVC的入口是DispatcherServlet,可以在web.xml配置DispatcherServlet 的攔截URL的表示式。下面對SpringMVC的執行流程做具體的說明 一、執行流程 1.客戶端在發起請求時,會先去檢查請求是不是符合DispatcherServlet的u
K8S 原始碼探祕 之 kubeadm upgrade apply 執行流程分析
一、引言 本文將基於 Kubernetes 1.12 版本,分析 kubeadm upgrade apply 的執行流程,希望對讀者理解 k8s 有幫助! 關
K8S 原始碼探祕 之 kubeadm join 執行流程分析
一、引言 本文將基於 Kubernetes 1.12 版本,分析 kubeadm join 的執行流程,希望對讀者理解 k8s 有幫助! 關於 init 流程
K8S 原始碼探祕 之 kubeadm init 執行流程分析
一、引言 kubeadm 是 k8s 重要的快速部署工具,也是其原生支援的部署工具,在實現自動化部署方面具有重要的研究價值。 本文將基於 Kubernetes 1.12 版本,分析
DispatcherServlet執行流程及相關原始碼分析
DispatcherServlet執行流程及相關原始碼分析 在前一篇文章SpringMVC 啟動流程及相關原始碼分析中,詳細探討了Spring MVC在Web容器中部署後的啟動過程,以及相關原始碼分析,同時也討論了DispatcherServlet類的初始化建立過程,相關內容在此不再贅述,如有需
Glide原理之執行流程分析
Glide是一個優秀的圖片載入庫,它有如下優點: 1. Glide可以監聽Activity的生命週期管理,更加合理的管理圖片的載入和釋放。 2. 載入質量,Picasso預設採用的ARGB-8888, Glide預設採用的是RGB-565,記憶體佔用會減小一半。 3. Glide可
Springboot 執行緒同步之Semaphore 資源包的簡單使用
如果你有一個東西, 你想別人觸碰它的時候,不能同時觸碰,需要按照你想要的每次多少人來觸碰。 算了,不做比喻了,程式碼原理其實也簡單,我們直接先看程式碼,我再做簡單的解釋(估計不用看解釋也能懂): package com.semaphore.controller; import org.sp
深入淺出Mybatis---SQL執行流程分析(原始碼篇)
最近太忙了,一直沒時間繼續更新部落格,今天忙裡偷閒繼續我的Mybatis學習之旅。在前九篇中,介紹了mybatis的配置以及使用, 那麼本篇將走進mybatis的原始碼,分析mybatis 的執行流程, 好啦,鄙人不喜歡口水話,還是直接上幹活吧: 1. SqlSessionFactory 與 S
gstreamer學習筆記---typefind功能流程簡單分析
使用gstreamer播放音視訊都知道,當我們直接通過playbin播放視訊的時候,playbin會根據當前播放的音視訊資料自動查詢相應的element新增到pipeline進行對資料進行下一步處理,那麼,當playbin在解析資料的時候,發現上一個elem
ThinkPHP5程式碼執行的簡單分析
漏洞影響版本: ThinkPHP 5.0.5-5.0.22 ThinkPHP 5.1.0-5.1.30 漏洞復現: 一.mac的debug環境搭建。 一鍵化環境搭建工具: mamp pro ,除錯工具 PHPstorm 開啟mamp pro,設定左上