本文分享自天翼雲開發者社區《如何有效管理爬蟲流量?》,作者:劉****海 據國際知名金融廣告服務平臺提供商Dianomi的報告《2018 Robot traffic report》的數據,在互聯網上人類流量僅僅占了48.2%,也就是說,一個頁面的10000個點擊裡面,大約5100個來自機器人。在航旅 ...
1.前言
自動裝配則是 SpringBoot 的核心,自動裝配是如何實現的呢?為什麼我們只要引入一個 starter 組件依賴就能實現自動裝配呢,接下來就讓我們一起來探討下 SpringBoot 的自動裝配機制
2.自動裝配原理
提到自動裝配,那麼你首先得知道spring的SPI(serviceproviderinterface)機制,因為自動裝配的完成就是靠SPI機制完成的。
接下來咱就詳細分解下自動裝配的原理過程
2.1@SpringBootApplication註解
spingBootApplication 註解是springBoot的核心,此註解為複合註解。如下圖,其中@EnableAutoConfiguration註解又是實現自動裝配的關鍵。
2.2@EnableAutoConfiguration註解
如圖:此註解也是一個複合註解,其中@Import也是實現自動裝配的關鍵,個人認為這是一個最核心的註解。有時間,我會單獨寫一篇博客來針對此註解進行講解。註意看:此註解中的value為:AutoConfigurationImportSelector.class。其實呢,@Import註解的value為一個class 數組,這裡並未看出,其實可以寫多個
2.3AutoConfigurationImportSelector
org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getAutoConfigurationEntry 是這裡的核心。
這裡做了兩件事情:
1.載入了各個模塊下的spring.factories文件
2.將spring.facrotries中載入的全限定類名去重,並將帶有@excule的註解刨除掉。
2.4 如何載入各個模塊下的spring.factories文件的呢?
我們可以追溯 org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations方法
在org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFactories中找到了載入spring.factroies的地方 其中FACTORIES_RESOURCE_LOCATION =META-INF/spring.factories 也就是說我們的spring.factories的存放路徑及名稱都需要遵守這個規則
這裡載入完成之後是spring.factorties里的所有值,之後會把enableAutoConfiguration的值過濾出來,然後載入到容器中。
下麵看下我們載入到了什麼:可以看到,這些***AutoConfiguration 類就是各個組件的配置類,這也就是為什麼springBoot不需要再編寫那麼的xml的原因。
2.5 拿到spring.factories 關於enableAutoConfiguration的值並過濾後各組件的的配置類是如何載入到spring 容器中的呢?
可以看到 我們的AutoConfigurationImportSelector 實現了DeferredImportSelector介面,而此介面繼承了ImportSelector介面。
ImportSelector介面:定義了selectImports介面方法,此方法返回了要載入進容器中的類的全限定名,
至此,我們知道了springBoot 是如何一步步找到各組件的spring.facatories,並將autoAutoConfiguration對應的類全限定名取出來,即各組件的配置類,然後載入到容器中的整個過程