springboot啓動都做了什麼

1.@SpringBootApplication = (默認屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
@Configuration的註解類標識這個類可以使用SpringIoC容器作爲bean定義的來源。@Bean註解告訴Spring,一個帶有@Bean的註解方法將返回一個對象,該對象應該被註冊爲在Spring應用程序上下文中的bean
@EnableAutoConfiguration:能夠自動配置spring的上下文,試圖猜測和配置你想要的bean類,通常會自動根據你的類路徑和你的bean定義自動配置。
@ComponentScan:會自動掃描指定包下的全部標有@Component的類,並註冊成bean,當然包括@Component下的子註解@Service,@Repository,@Controller。

 

2.@EnableAutoConfiguration = @Import + @AutoConfigurationPackage
@AutoConfigurationPackage: 主要作用是自動配置包
@Import: Spring底層註解@Import,給容器中導入一個組件;
導入的組件由AutoConfigurationPackages.Registrar.class 將主配置類(@SpringBootApplication標註的類)的所在包以及下面所有子包裏面的所有組件掃描到Spring容器。

具體工作流程圖:

 

3.@EnableAutoConfiguration加載過程 
自動配置主要由AutoConfigurationImportSelector實現的,我們主要從這個類開始講起。AutoConfigurationImportSelector是
@EnableAutoConfiguration“@Import”的DeferredImportSelector實現類,由於DeferredImportSelector作爲ImportSelector的子接口,所以組件自動配置邏輯均在selectImports(AnnotationMetadata)方法中實現

 

4.springboot自動配置啓動流程
SpringBoot啓動的時候會通過@EnableAutoConfiguration註解找到META-INF/spring.factories配置文件中的所有自動配置類,
並對其進行加載,而這些自動配置類都是以AutoConfiguration結尾來命名的,它實際上就是一個JavaConfig形式的Spring容
器配置類,它能通過以Properties結尾命名的類中取得在全局配置文件中配置的屬性如:server.port。
而XxxxProperties類是通過@ConfigurationProperties註解與全局配置文件中對應的屬性進行綁定的,其實就是將配置屬性轉換爲實體類中的屬性。

 

5.總結:
springboot底層實現自動配置的步驟:
①.springboot應用啓動
②.@SpringBootApplication起作用
③.@EnableAutoConfiguration
④.@AutoConfigurationPackage:這個組合註解主要是@Import(AutoConfigurationPackages.Registrar.class),它通過Registrar類導入到容器中,而Registrar類作用是掃描主配置類同級目錄以及子包,並將相應的組件導入到springboot創建管理的容器中
⑤.@Import(AutoConfigurationImportSelector.class):它通過將AutoConfigurationImportSelector類導入到容器中,AutoConfigurationImportSelector類作用是通過selectImports方法實現將配置類信息交給SpringFactory加載器進行一系列的容器創建過程.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章