SpringBoot中@EnableAutoConfiguration註解的做用

wKiom1nXS5iAI_TDAACihSWnjr0248.png

在這個註解中,最重要的是它導入了一個類EnableAutoConfigurationImportSelectorspring

它是一個ImportSelector接口的實現類,而ImportSelector接口中的selectImports方法所返回的類將數組

被Spring容器管理起來。ide

wKioL1nXTH-yo-7TAAFDIsA5hJg724.png


再看AutoConfigurationImportSelector類,它不光實現了ImportSelector接口,還實現了不少其它的Aware接口,分別表示在某個時機會被回調,咱們看一下Aware接口就知道了。spa

wKioL1nXTUmz4ILZAACDqpWOyFE290.png


wKioL1nXTXSj9_1QAACp2MWZ7dI249.png

咱們能夠知道,全部的aware都優先於selectImports方法執行,也就是說selectImports方法最後執行,那麼在它執行的時候全部須要的資源都已經獲取到了(就是那四個成員變量)orm

那咱們看看selectImports都幹了什麼blog

wKioL1nXTj_yjm4oAACWnR3sE4Y296.png

看圖說話:排序

一、加載META-INF/spring-autoconfigure-metadata.properties文件接口

二、獲取註解的屬性及其值(PS:註解指的是@EnableAutoConfiguration註解)資源

三、在classpath下全部的META-INF/spring.factories文件中查找org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,並將其封裝到一個List中返回get

四、對上一步返回的List中的元素去重、排序

五、依據第2步中獲取的屬性值排除一些特定的類

六、對上一步中所獲得的List進行過濾,過濾的依據是條件匹配。這裏用到的過濾器是org.springframework.boot.autoconfigure.condition.OnClassCondition最終返回的是一個ConditionOutcome[]數組。(PS:不少類都是依賴於其它的類的,當有某個類時纔會裝配,因此此次過濾的就是根據是否有某個class進而決定是否裝配的。這些類所依賴的類都寫在META-INF/spring-autoconfigure-metadata.properties文件裏


wKiom1nXXbWh1IlFAAEnxus6kvs830.png

wKiom1nXXVbTRmtDAAChrIH8o4Y208.png

wKioL1nXXQmCPO6cAACW6iTt4Pc315.png

wKioL1nXXQrj4tWuAAGJE9YaRxg099.png



wKiom1nXXhLw5gXuAAC6XBizfiI334.png

相關文章
相關標籤/搜索