1. 程式人生 > >springcloud feign原始碼分析(8)——停一停腳步:結合feign動態代理的生成原理來畫圖劇透一下feign請求處理機制

springcloud feign原始碼分析(8)——停一停腳步:結合feign動態代理的生成原理來畫圖劇透一下feign請求處理機制

我們已經明白了feign動態代理的機制

那麼這一節我們結合畫圖來說一下,對feign動態代理進行請求的時候會幹什麼

除非你在@FeignClient裡配置一個url屬性,指定你要訪問的服務的url地址,才會走我們沒看的一段原始碼邏輯,否則的話,直接是走loadBalance()方法來生成動態代理

targetToHandlersByName.apply(target);

這行程式碼,其實很關鍵,他其實是對我們定義的ServiceAClient介面進行解析,解析裡面有哪些方法,然後為每個方法建立一個SynchronousMethodHandler出來,也就是說那個MethodHandler專門用來處理那個方法的請求呼叫

target.type(),這個就是ServiceAClient介面

JDK動態代理,你可以認為他動態生成了一個類,沒有名字的,匿名類,這個類是實現了ServiceAClient介面,基於這個匿名的類建立了一個物件,T proxy,他就是所謂的動態代理,對這個T proxy物件所有介面方法的呼叫,都會交給InvocationHandler來處理

總結:feign基於動態代理處理請求的機制 流程圖