1. 程式人生 > >簡單分析SpringBoot執行流程

簡單分析SpringBoot執行流程

SpringBoot執行流程

  1. 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

( annotation = ComponentScan.class,

        attribute = "basePackageClasses")

    Class<?>[] scanBasePackageClasses() default {};

}

@Configuration:表示將該類作用springboot配置檔案類。

@EnableAutoConfiguration:表示程式啟動時,自動載入springboot預設的配置。@ComponentScan:表示程式啟動是,自動掃描當前包及子包下所有類。

從原始碼中得知 @SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、

 @ComponentScan 註解所修飾,也就是說, Springboot 對這三個註解進行了封裝整合,簡化程式的配置。

程式啟動時,會自動掃描啟動類所在包及子包中的帶有spring相關注解的元件,

  1. SpringBoot程式啟動流程

SpringBoot程式啟動時,啟動類的main方法是程式的入口,執行

SpringApplication.run(BootApplication.class, args);

第一個引數為啟動類的類物件,第二個為String可變引數,通常不寫。

當程式開始啟動時,在啟動類中呼叫SpringApplication的靜態run方法,此時會執行以下操作

  1. 首先新建一個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,設定左上