文章目錄
- 概覽
- @EnableDiscoveryClient
- EnableDiscoveryClientImportSelector.class
-
- selectImports()
- 總結
概覽
當我們想要将一個用戶端注冊到Eureka上,我們隻需要在啟動類上添加一個
注解就搞定了。本篇文章主要就是對該注解進行介紹,并看看它背後究竟做了什麼。
@EnableDiscoveryClient
- @Import注解引入了
類。EnableDiscoveryClientImportSelector.class
- autoRegister屬性,預設為自動注冊
注解裡面的内容比較簡單,是以它實際的處理邏輯就在
EnableDiscoveryClientImportSelector.class
這個類中。
EnableDiscoveryClientImportSelector.class
-
注解,将該類的加載順序排在最後@Order
- 繼承
,實際上是對spring體系中的ImportSelector接口進行擴充SpringFactoryImportSelector
ImportSelector詳見 【spring學習筆記 七】ConfigurationClassPostProcessor詳解
這個類中一共隻有三個方法
-
主要的實作邏輯selectImports()
-
是否啟用isEnable()
-
是否必須有加載類hasDefaultFactory()
其中2,3将會在其父類的
selectImport()
中用到 。
接下來我們來看看
selectImports()
裡面有哪些邏輯。
selectImports()
- 通路其父類的
,主要是看看有沒有需要加載到容器中的類(從spring.factories檔案中)。selectImports()
- 是否需要注冊,如果需要,進行第3步,否則進行第4步。
- 将
類加載到環境中。AutoServiceRegistrationConfiguration
- 向環境中添加屬性值。
selectImports()
傳回的String字元串,是類的權限定名,并且會将其添加到 spring容器中
下面就來看下其父類的
selectImports()
父類就用到了
isEnable()
和
hasDefaultFactory()
方法。
- 通過
來判斷是否從spring.factories檔案擷取加載類。isEnable()
- 加載spring.factories檔案中對應泛型的加載類資訊(本文中就是
注解)。@EnableDiscoveryClient
- 判斷是否必須要有加載類資訊(
)。hasDefaultFactory()
- 傳回加載類資訊。
總結
是以我們可以知道,spring cloud中用戶端進行注冊的核心邏輯應該在
AutoServiceRegistrationConfiguration.class
類中。
下篇文章,我們就将來看看
AutoServiceRegistrationConfiguration.class
中又做了哪些事情。