在springboot主程序類中,有一個很是重要的註釋@SpringBootApplication,Springboot運行這個類下的main方法啓動springboot應用,以下:java
按住鍵盤上Ctrl鍵,用鼠標點擊這個註釋,能夠看到這個註釋啓用了三個註釋功能:spring
1.@SpringBootConfiguration:容許在上下文中註冊額外的bean或導入其餘配置類express
2.@EnableAutoConfiguration
:啓用Spring Boot的自動配置機制springboot
3.@ComponentScan:啓用組件掃描功能測試
簡單來講,就是@SpringBootApplication是一個組合註解,至關於使用@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三個註釋與它們的默認屬性,以下圖:spa
@SpringBootConfiguration :SpringBoot配置類,與@Configuration註解做用同樣,將當前類內聲明的一個或多個以
3d
說明: @*Configuration表示xx配置類,點擊@SpringBootConfiguration代碼分析,以下圖:調試
同時須要說明一下,配置類也是Spring容器中的一個組件,咱們能夠按住鍵盤上的Ctrl鍵,用鼠標點@Configuration打開表明跟蹤以下圖:code
@EnableAutoConfiguration也是一個組註解,咱們按上述一樣的方法打開代碼跟蹤。以下圖所示:
blog
@AutoConfigurationPackage:包自動配置,跟蹤代碼發現就是由一個@import註釋,以下圖:
經過跟蹤發現, @AutoConfigurationPackage註解使用的Spring底層註解@Import,給容器導入一個組件,導入的組件由AutoConfigurationPackages.Registrar類處理導入,按住鍵盤Ctrl鍵,用鼠標點擊Registrar類名,能夠看到以下圖所示代碼結構:
咱們在Registrar方法中的第129行處打下斷點,對register方法進行跟蹤調試,運行項目調試程序,以下圖所示:
依次點擊introspectedClass咱們能夠看到@SpringBootApplication標註所在類爲SpringApplicationStart,以下圖所示:
爲了測試獲得導入的包名,咱們把new PackageImport(metadata).getPackageName()),複製到調試窗口中的Expressions標籤頁,點擊Add new expression,在name中粘貼new PackageImport(metadata).getPackageName()),回車便可在Value中看到導入的包名com.goldCup.boot.main,以下圖:
經過調試咱們能夠知道:@AutoConfigurationPackage註釋的做用就是將主配置類所在的包下面全部的組件都掃描到Spring容器中。
@EnableAutoConfiguration還有另外一個@Import註釋,跟據字義,咱們能夠理解爲導入組件選擇器自動配置,做用是將須要導入的組件以全類名的方式返回,這些組件將被添加到Spring容器中,如圖:
自動配置類的做用,配置注入功能組件自動完成。
SpringBoot在啓動的時候從自動配置類路徑下的META-INF/spring.factorles中獲取EnableAutoConfiguration指定的值,並將這些值做爲自動配置類導入到容器中,自動配置類就生效,以下圖: