查看SpringBoot的源碼,了解運行原理


簡單查看SpringBoot的源碼

一. 了解自動生成的文件

打開SpringBoot項目后,系統會自動生成一個SpringbootDemo01Application.java文件用於存放程序的主方法,此外會生成application.properties存放配置文件,pom.xml依舊存放各種程序需要的依賴。
在這里插入圖片描述

二. 簡單查看SpringBoot的底層

二.1. 查看pom.xml

點開項目的pom.xml之后找到parent標簽就可以找到本項目的父項目(SpringBoot的啟動器)。在這里插入圖片描述

父項目就是SpringBoot管理依賴的地方,SpringBoot的版本管理控制的地方,有此文件今后導入依賴就不需要寫版本了(如果導入的包沒有在依賴中管理着就需要手動配置版本了)。在這里插入圖片描述
啟動器:SpringBoot將所有的功能場景都抽取出來,做成一個個的啟動器,只需要在項目中引入這些starter即可,所有相關的依賴都會導入進來 , 我們要用什么功能就導入什么樣的場景啟動器即可。
在這里插入圖片描述
springboot-boot-starter:就是spring-boot的場景啟動器。spring-boot-starter-web幫助我們導入了web模塊正常運行所需的組件。

二.2. 查看主程序

首先我們進入SpringbootDemo01Application.java,會看到主方法、run方法以及@SpringBootApplication注解。由於我們要查看源碼,所以Ctrl點進@SpringBootApplication查看源碼:

@SpringBootApplication用來標注一個主程序,說明是一個SpringBoot應用。main方法用來將spring應用啟動起來。
在這里插入圖片描述

二.2.1 SpringBootApplication

@SpringBootApplication:SpringBoot應用標注在某個類上說明這個類是SpringBoot的主配置類 , SpringBoot就應該運行這個類的main方法來啟動SpringBoot應用。進入這個注解后會發現程序被@SpringBootConfiguration、@ComponentScan及@EnableAutoConfiguration注解修飾。在這里插入圖片描述
下面我們分別點進源碼,查看這三個注解的作用。

  1. @SpringBootConfiguration

    @SpringBootConfiguration:SpringBoot的配置類 ;標注在某個類上 , 表示這是一個SpringBoot的配置類;我們繼續進去這個注解查看;
    在這里插入圖片描述
    點進Configuration發現發現配置類也是容器中的一個組件

  2. @ComponentScan
    在這里插入圖片描述
    @ComponentScan它對應xml配置中的元素。@ComponentScan的功能就是自動掃描並加載符合條件的組件或者bean , 將這個bean定義加載到IOC容器中。在這里插入圖片描述

  3. @EnableAutoConfiguration

    回到 SpringBootApplication 注解中繼續看@EnableAutoConfiguration(開啟自動配置功能)我們需要的配置,SpringBoot可以自動幫我們配置,@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能,這樣自動配置才能生效

    我們點進源碼查看會看到@AutoConfigurationImporServlet和@Import({AutoConfigurationImportSelector.class}) (給容器導入組件 AutoConfigurationImportSelector :它將所有需要導入的組件以全類名的方式返回 , 這些組件就會被添加到容器中 ;)兩個注解:

    1. @AutoConfigurationPackage : 自動配置包 , 點進去看到一個 @Import({Registrar.class}):Spring底層注解@import , 給容器中導入一個組件 ,導入的組件由 {Registrar.class} 將主配置類 (即@SpringBootApplication標注的類)的所在包及包下面所有子包里面的所有組件掃描到Spring容器 [外鏈圖片轉存失敗(img-676K0reP-1565580571905)在這里插入圖片描述
      2. 點擊進入AutoConfigurationImportSelector的源碼,點擊進入SpringFactoriesLoader的源碼,找到public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";。META-INF/spring.factories是一個配置文件,命令會去讀這個配置文件里的東西。我們打開spring.factories文件 , 看到了很多自動配置的文件;這就是自動配置根源。
      3. SpringBoot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導入容器 , 自動配置類就生效 , 幫我們進行自動配置工作。以前我們需要自己配置的東西 , 自動配置類都幫我們解決了。
      4. 真正實現是從classpath中搜尋所有的META-INF/spring.factories配置文件 ,並將其中對應的 org.springframework.boot.autoconfigure. 包下的配置項通過反射實例化為對應標注了 @Configuration的JavaConfig形式的IOC容器配置類 , 然后將這些都匯總成為一個實例並加載到IOC容器中。

二.2.2. run方法

  1. 主方法主要分兩部分,一部分是SpringApplication的實例化,二是run方法的執行;

    1. SpringApplication的實例化

      1. 推斷應用的類型是普通的項目還是Web項目
      2. 查找並加載所有可用初始化器 , 設置到initializers屬性中
      3. 找出所有的應用程序監聽器,設置到listeners屬性中
      4. 推斷並設置main方法的定義類,找到運行的主類
    2. run方法的執行

找出所有的應用程序監聽器,設置到listeners屬性中
4. 推斷並設置main方法的定義類,找到運行的主類

  1. run方法的執行
    在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM