優雅的使用SpringCloud

1、前言

       SpringCloud 是現在比較流行的微服務架構,隨着微服務的流行,更多企業也從傳統的架構向微服務架構轉型。轉型的過程中,爲了兼容之前的服務架構,部分企業選擇了雙註冊中心(指Dubbo和Cloud)。所以開發者在改造的時候,非常掣肘,只能在原來的基礎上做一些調整。最後代碼看起來有點似驢非馬的感覺,當然這是對於一個有代碼潔癖的人的感覺,哈哈哈。。。功能當然是完全OK的。

2、SpringCloud初體驗

      用過SpringCloud的朋友們都知道,Cloud通過FeignClient對外提供服務。該項目也是一個獨立的SpringBoot項目,可以通過頁面直接訪問控制層。

     通過FeignClient和Controller層的對比,你會發現兩邊的代碼相似度特別高。如圖:

     我們會發現:Controller其實是對Feign客戶端的接口實現。

3、SpringCloud的優雅實現過程

      問題:①Controller直接去實現Feign客戶端,Controller的方法你能不能映射到對用的url?如圖:

                ②如果可以,這個是FeignClient註解的功能還是接口本身的功能?

 

    Controller直接實現FeignClient,這個SpringCloud官方已經給出了文檔,如圖:

     通過啓動日誌,我們能看到url是可以映射的,而且訪問正常,如圖:

      要驗證是不是FeignClient是否提供的功能,只需要把@FeignClient註解註釋掉,你會發現,everything is OK。所以控制能使用接口的映射是接口特有的功能。

      下來我們來看看,爲什麼控制層可以拿到接口的註解。

      我們都知道springboot不是新的框架,只是對springmvc框架做了整合。獲取映射的url,我們需要追蹤RequestMappingHandlerMapping這個類。通過源碼追蹤,如圖:

   

      通過源碼我們可以看到:當前類的註解拿不到時,會獲取被實現接口的註解,如果還拿不到在獲取父類的註解。

     到這裏我們就知道映射的內幕了。這樣以來,我們就可以直接實現FeignClient的接口,省去重複的代碼。這樣我們的代碼就會變得很優雅。

4、總結

     優化的實現方式雖然簡化代碼,但是增加了FeignClient的和Controller的是耦合性,很多人不建議如此操作。至於現實中如何優雅的操作,就仁者見仁,智者見智了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章