天天看點

【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結

文章目錄

  • 概覽
  • @EnableDiscoveryClient
  • EnableDiscoveryClientImportSelector.class
    • selectImports()
  • 總結

概覽

當我們想要将一個用戶端注冊到Eureka上,我們隻需要在啟動類上添加一個

注解就搞定了。本篇文章主要就是對該注解進行介紹,并看看它背後究竟做了什麼。

@EnableDiscoveryClient

【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結
  1. @Import注解引入了

    EnableDiscoveryClientImportSelector.class

    類。
  2. autoRegister屬性,預設為自動注冊

注解裡面的内容比較簡單,是以它實際的處理邏輯就在

EnableDiscoveryClientImportSelector.class

這個類中。

EnableDiscoveryClientImportSelector.class

【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結
  1. @Order

    注解,将該類的加載順序排在最後
  2. 繼承

    SpringFactoryImportSelector

    ,實際上是對spring體系中的ImportSelector接口進行擴充
ImportSelector詳見 【spring學習筆記 七】ConfigurationClassPostProcessor詳解

這個類中一共隻有三個方法

【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結
  1. selectImports()

    主要的實作邏輯
  2. isEnable()

    是否啟用
  3. hasDefaultFactory()

    是否必須有加載類

其中2,3将會在其父類的

selectImport()

中用到 。

接下來我們來看看

selectImports()

裡面有哪些邏輯。

selectImports()

【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結
  1. 通路其父類的

    selectImports()

    ,主要是看看有沒有需要加載到容器中的類(從spring.factories檔案中)。
  2. 是否需要注冊,如果需要,進行第3步,否則進行第4步。
  3. AutoServiceRegistrationConfiguration

    類加載到環境中。
    【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結
  4. 向環境中添加屬性值。
    【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結

selectImports()

傳回的String字元串,是類的權限定名,并且會将其添加到 spring容器中

下面就來看下其父類的

selectImports()

【spring cloud學習筆記 一】用戶端啟動@EnableDiscoveryClient概覽@EnableDiscoveryClientEnableDiscoveryClientImportSelector.class總結

父類就用到了

isEnable()

hasDefaultFactory()

方法。

  1. 通過

    isEnable()

    來判斷是否從spring.factories檔案擷取加載類。
  2. 加載spring.factories檔案中對應泛型的加載類資訊(本文中就是

    @EnableDiscoveryClient

    注解)。
  3. 判斷是否必須要有加載類資訊(

    hasDefaultFactory()

    )。
  4. 傳回加載類資訊。

總結

是以我們可以知道,spring cloud中用戶端進行注冊的核心邏輯應該在

AutoServiceRegistrationConfiguration.class

類中。

下篇文章,我們就将來看看

AutoServiceRegistrationConfiguration.class

中又做了哪些事情。