其中它主要是依賴壹個父項目,主要是管理項目的資源過濾及插件!
點進去,發現還有壹個父依賴
這裏才是真正管理SpringBoot應用裏面所有依賴版本的地方,SpringBoot的版本控制中心;
以後我們導入依賴默認是不需要寫版本;但是如果導入的包沒有在依賴中管理著就需要手動配置版本了;
springboot-boot-starter-xxx :就是spring-boot的場景啟動器
SpringBoot將所有的功能場景都抽取出來,做成壹個個的starter (啟動器),只需要在項目中引入這些starter即可,所有相關的依賴都會導入進來 , 我們要用什麽功能就導入什麽樣的場景啟動器即可 ;我們未來也可以自己自定義 starter;
默認的主啟動類
但是壹個簡單的啟動類並不簡單!我們來分析壹下這些註解都幹了什麽
@SpringBootApplication
作用:標註在某個類上說明這個類是SpringBoot的主配置類 , SpringBoot就應該運行這個類的main方法來啟動SpringBoot應用;
進入這個註解:可以看到上面還有很多其他註解!
@ComponentScan
這個註解在Spring中很重要 ,它對應XML配置中的元素。
作用:自動掃描並加載符合條件的組件或者bean , 將這個bean定義加載到IOC容器中
@SpringBootConfiguration
作用:SpringBoot的配置類 ,標註在某個類上 , 表示這是壹個SpringBoot的配置類;
我們繼續進去這個註解查看
這裏的 @Configuration,說明這是壹個配置類 ,配置類就是對應Spring的xml 配置文件;
裏面的 @Component 這就說明,啟動類本身也是Spring中的壹個組件而已,負責啟動應用!
我們回到 SpringBootApplication 註解中繼續看。
@EnableAutoConfiguration :開啟自動配置功能
以前我們需要自己配置的東西,而現在SpringBoot可以自動幫我們配置 ;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能,這樣自動配置才能生效;
點進註解接續查看:
@AutoConfigurationPackage :自動配置包
@import :Spring底層註解@import , 給容器中導入壹個組件
Registrar.class 作用:將主啟動類所在包及包下面所有子包裏面的所有組件掃描到Spring容器 ;
這個分析完了,退到上壹步,繼續看
@Import({AutoConfigurationImportSelector.class}) :給容器導入組件 ;
AutoConfigurationImportSelector :自動配置導入選擇器,那麽它會導入哪些組件的選擇器呢?我們點擊去這個類看源碼:
1、這個類中有壹個這樣的方法:
2、這個方法又調用了 SpringFactoriesLoader 類的靜態方法!我們進入SpringFactoriesLoader類loadFactoryNames() 方法
3、我們繼續點擊查看 loadSpringFactories 方法
4、發現壹個多次出現的文件:spring.factories,全局搜索它
spring.factories
我們根據源頭打開spring.factories , 看到了很多自動配置的文件;這就是自動配置根源所在!
可以看到這些壹個個的都是JavaConfig配置類,而且都註入了壹些Bean,可以找壹些自己認識的類,看著熟悉壹下!
所以,自動配置真正實現是從classpath中搜尋所有的META-INF/spring.factories配置文件 ,並將其中對應的 org.springframework.boot.autoconfigure. 包下的配置項,通過反射實例化為對應標註了 @Configuration的JavaConfig形式的IOC容器配置類 , 然後將這些都匯總成為壹個實例並加載到IOC容器中。
結論:
不簡單的方法
我最初以為就是運行了壹個main方法,沒想到卻開啟了壹個服務;
SpringApplication.run分析
分析該方法主要分兩部分,壹部分是SpringApplication的實例化,二是run方法的執行
springApplication這個類主要做了以下四件事情:
1、推斷應用的類型是普通的項目還是Web項目
2、查找並加載所有可用初始化器 , 設置到initializers屬性中
3、找出所有的應用程序監聽器,設置到listeners屬性中
4、推斷並設置main方法的定義類,找到運行的主類
run方法流程分析