1. 程式人生 > 實用技巧 >階段一 第一週 2-12 springboot自動裝配簡述

階段一 第一週 2-12 springboot自動裝配簡述

  • 重點是SpringApplication.run這個方法,點進去可以看到英文註釋中說明了它使用了一些預設的配置。那麼這些預設的配置是從哪裡來的呢,其實都是從@SpringBootApplication這個註解來的。執行這個方法之後,會返回一個正在執行的runningApplicationContext上下文物件。也就是springboot容器啟動以後,會有一個上下文物件的。

  • 接下來我們看下這個註解。我們需要關注它裡面的@SpringBootConfiguration,然後有一個@EnableAutoConfiguration最後一個是@ComponentScan。注意我們當前這個Application是在com.imooc這個包下,所以當我們的容器啟動以後,它會掃描當前我們這個包下所有的類以及所有子包的類。比方說這個包下面有dao層,有service層都會被@ComponentScan掃描到。當然,我們現在加了一個@RestController在它的子包controller下面,所以它又會被我們的Application我們的容器去掃描到。

  • 然後我們看下@SpringBootConfiguration,那麼可以看到它是一個介面,這個介面的主要的配置是一個@Configuration,代表了它是一個容器,是一個IOC容器,

  • 另外,@EnableAutoConfiguration,它是用來開啟自動裝配的,點進去然後它裡面有個@Import,它就是用於去做匯入的,就是把一個個的@Configuration導進去,把容器導進去。然後我們需要看@Import上面的AutoConfigurationImportSelector.class,它是一個自動裝配的用於去做匯入的選擇器,既然是一個選擇器,它就有可能包含很多的內容,比如舉例子,jQuery的選擇器,可以批量選擇很多東西,在這裡是一樣的,它可以選擇很多自動裝配的類。點選這個AutoConfigurationImportSelector看看,這個類裡面有很多方法,我們看selectImports這個方法,然後方法裡面有個getAutoConfigurationEntry,這個是用於去獲得自動裝配的類。進去後,會看到有個語句得到了List configurations,那麼這個就是配置,它是放到了list裡面的。 接下來看getCandidateConfigurations這個方法, 這裡有個斷言,如果configurations為空的話,可能會報異常,重點資訊是META-INF/spring.factories

    ,那麼spring.factories裡面包含了很多自動裝配的類,那麼這些類是一個個的字串,最終獲得了以後是字串型別的list。我們用idea的定位,定位一下當前這個AutoConfigurationImportSelector這個類所在的jar包,這個jar包就是spring-boot-autoconfiguration這個jar包,這個jar包裡面有META-INF這個資料夾,裡面有spring.factories檔案。雙擊了以後,可以看到裡面有很多內容,大部分類名都以AutoConfiguration結尾,也就是springboot為我們實現了很多自動裝配,我們可以看下EmbeddedWebServerFactoryCustomizerAutoConfiguraion,裡面有預設的Tomcat的配置,然後再看WebMVCAutoConfiguration,就是幫我們精簡了很多springMVC的配置,然後還有一個ServletWebServiceFactoryAutoConfiguration,這個類的註釋自動裝配了servlet web servers,就是我們的web伺服器是通過自動裝配執行的。這也就是為什麼我們運行了Application後,我們內建的Tomcat就啟動了。