日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Cloud Feign原理詳解

瀏覽:24日期:2023-07-12 11:02:55
目錄Feign的大體機制@EnableFeignClients 和 @FeignClient 注解registerDefaultConfiguration方法registerFeignClients方法feign客戶端的動態代理

Feign 主要是幫助我們方便進行rest api服務間的調用,其大體實現思路就我們通過標記注解在一個接口類上(注解上將包含要調用的接口信息),之后在調用時根據注解信息組裝好請求信息,接下來基于ribbon這些負載均衡器來生成真實的服務地址,最后將請求發送出去;之后將接收到的結果反序列化為相關的Java對象供我們直接使用。 下面我們走進Spring Cloud對feign封裝的源碼中去了解其主要實現機制。

Feign的大體機制

通過在啟動類上標記 @EnableFeignClients 注解來開啟feign的功能,服務啟動后會掃描 @FeignClient 注解標記的接口,然后根據掃描的注解信息為每個接口類生成feign客戶端請求,同時解析接口方法中的Spring MVC的相關注解,通過專門的注解解析器識別這些注解信息,以便后面可以正確的組裝請求參數,使用 Ribbon 和 Eureka 獲取到請求服務的真實地址等信息,最后使用 http 相關組件進行執行調用。其大致流程圖如下:

Spring Cloud Feign原理詳解

@EnableFeignClients 和 @FeignClient 注解

在EnableFeignClients 注解類中有一個 @Import(FeignClientsRegistrar.class)的配置

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented// 引入FeignClientsRegistrar 來掃描@FeignClient注解下的類@Import(FeignClientsRegistrar.class)public @interface EnableFeignClients { ...}

我們追蹤代碼進入到FeignClientsRegistrar類中,會發現FeignClientsRegistrar 類實現了ImportBeanDefinitionRegistrar(在spring context 項目中)接口,因此spring boot啟動時會調用它的registerBeanDefinitions()方法,該方法中會掃描 EnableFeignClients 和 FeignClient 注解信息并設置相關信息。

/** * spring boot 啟動時會自動調用 ImportBeanDefinitionRegistrar 入口方法 */@Overridepublic void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { // 讀取 @EnableFeignClients 注解中信息 registerDefaultConfiguration(metadata, registry); // 掃描所有@FeignClient注解的類 registerFeignClients(metadata, registry);}registerDefaultConfiguration方法

在registerDefaultConfiguration()方法中會讀取@EnableFeignClients注解信息,然后將這些信息注冊到一個 BeanDefinitionRegistry 里面去;之后feign的一些默認配置將通過這里注冊的信息中取獲取。

registerFeignClients方法 registerFeignClients()方法會掃描相關包路徑(如果EnableFeignClients的basePackages沒有配置,默認會直接使用啟動類所在的包路徑)下所有的@FeiginClient注解的類 然后根據@FeiginClient注解信息向BeanDefinitionRegistry里面注冊bean,注意這里設置的bean名稱生成規則是使用服務名+FeignClientSpecification.class.getSimpleName(),因此如果對一個服務寫多個接口類會發生bean名稱重復導致注冊失敗。所以需要增加一個 allow-bean-definition-overriding: true 的配置。 最后會調用 registerFeignClient() 方法注冊feign客戶端,這里的bean名稱的為當前接口類的類路徑。

其流程圖如下:

Spring Cloud Feign原理詳解

feign客戶端的動態代理

上面registerFeignClient()方法中在構建bean的時候,實際構建的是FeignClientFactoryBean。

BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(FeignClientFactoryBean.class);

FeignClientFactoryBean 類對父類的getObject()方法進行了重寫,后面動態代理時使用的就是它來獲取feign client的。在這里會根據上面注解配置,同時會讀取application.yml配置信息,根據配置來設置feign的相關信息,比如編解碼器、注解解析器、請求超時時間等;之后如果沒有設置url那么就會和負載均衡器(ribbon)整合。最后會通過反射將接口中相關方法進行解析保存供后面進行jdk代理使用。

@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 判斷是否是不需要代理的 if ('equals'.equals(method.getName())) { try { Object otherHandler = args.length > 0 && args[0] != null ? Proxy.getInvocationHandler(args[0]) : null; return equals(otherHandler); } catch (IllegalArgumentException e) { return false; } } else if ('hashCode'.equals(method.getName())) { return hashCode(); } else if ('toString'.equals(method.getName())) { return toString(); } // 需要代理,執行代理方法 return dispatch.get(method).invoke(args);}

Spring Cloud Feign原理詳解

以上就是Spring Cloud Feign原理詳解的詳細內容,更多關于Spring Cloud Feign原理的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲国产不卡| 亚洲精品第一| 四季av一区二区凹凸精品| 欧美激情综合| 久久不见久久见国语| 国产精品分类| 丁香婷婷久久| 日韩欧美在线中字| 另类中文字幕国产精品| 高潮久久久久久久久久久久久久| 国产精品国产一区| 成人美女视频| 欧美色图一区| 中国女人久久久| 免费在线成人网| 日韩高清一区二区| 国产精品毛片aⅴ一区二区三区| 国产精品国码视频| 深夜福利视频一区二区| 免费久久久久久久久| 另类av一区二区| 国产探花在线精品一区二区| 精品国产亚洲一区二区三区在线| 日韩精品第一区| 国产在线不卡| 亚洲精品影视| 国产videos久久| 欧美精品激情| 国产欧美三级| 国产精品原创| 久久午夜精品| 久久wwww| 欧美不卡在线| 欧美一级二级视频| 桃色av一区二区| 在线看片日韩| 精品视频99| 国产国产精品| 国产精品亚洲综合色区韩国| 日本一二区不卡| 99亚洲视频| 国产日韩欧美三级| 99久久99视频只有精品| 日本亚洲视频在线| 岛国av免费在线观看| 天堂成人国产精品一区| 欧美激情精品| 国产精品免费看| 久久精品国产99国产精品| 国产综合视频| 国产精品欧美大片| 九色精品91| 美女视频网站久久| 在线视频日韩| 国产精品a久久久久| 免费黄色成人| 精品视频亚洲| 五月国产精品| 伊人久久大香线蕉av不卡| 欧美日本二区| 五月精品视频| 久久免费精品| 最新国产精品久久久| 欧美少妇精品| 国产调教精品| 鲁大师成人一区二区三区| 国产成人精品三级高清久久91| 日韩在线一二三区| 日本欧美不卡| 国产三级一区| 欧美专区一区二区三区| 国产在线看片免费视频在线观看| 亚洲精品一区二区在线播放∴| 日韩精品一区二区三区免费观影 | 国产精品欧美大片| 日韩精品一区第一页| 91亚洲一区| 日韩国产欧美三级| 久久99伊人| 99免费精品| 久久精品国产成人一区二区三区| 亚洲我射av| 99久久亚洲精品| 日本久久综合| 久久99精品久久久野外观看| 水蜜桃久久夜色精品一区的特点| 九色porny丨国产首页在线| 国产福利资源一区| 男人的天堂久久精品| 99精品在线观看| 黄毛片在线观看| 国产无遮挡裸体免费久久 | 欧美日韩精品在线一区| 精品国产91| 国产精品国产三级在线观看| 日韩欧美久久| 亚洲美女91| 欧美特黄一区| 久久久人人人| 日本精品影院| 国产在线看片免费视频在线观看| 国产九九精品| 亚洲精品日本| 蜜臀91精品一区二区三区| 精品一区在线| 亚洲国产日韩欧美在线| 久久91导航| 日本精品影院| 亚洲福利精品| 精品日韩毛片| 好吊一区二区三区| 国产综合视频| 99视频精品| 久久亚洲视频| 亚洲影院天堂中文av色| 老司机精品久久| 亚洲在线久久| 日本一不卡视频| 日本午夜免费一区二区| 日韩欧美三区| 日本aⅴ精品一区二区三区| 老司机精品久久| 亚洲区第一页| 97成人超碰| 国产精品一区二区99| 国产欧美69| 欧美激情福利| 中文字幕在线高清| 亚洲高清激情| 国产精品色网| 日本一区中文字幕| 久久精品999| 国产一区二区三区国产精品| 日韩国产在线| 一区久久精品| 日韩精品免费视频一区二区三区| 日韩精品免费视频一区二区三区| 国产精品亚洲产品| 91嫩草亚洲精品| 四虎884aa成人精品最新| 亚洲欧美日韩高清在线| 蜜桃视频在线观看一区| 日韩av网站免费在线| 欧美91在线|欧美| 国产在线看片免费视频在线观看| 久久亚洲国产| 亚洲香蕉久久| 精品一区电影| 欧美aa国产视频| 日本不卡视频在线| 精品三级av在线导航| 日韩不卡在线| 免费精品视频最新在线| 久久激情综合网| av在线最新| 日韩中文字幕区一区有砖一区| 久久狠狠亚洲综合| 婷婷激情一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产欧美日韩视频在线| 蜜桃av在线播放| 蜜臀av一区二区在线免费观看 | 麻豆国产精品视频| 日韩精品看片| 老牛国产精品一区的观看方式| 国产精品密蕾丝视频下载| 成人日韩在线观看| 亚洲影视一区二区三区| 精品国产麻豆| 在线午夜精品| 美女尤物国产一区| 在线看片不卡| 国产精品亚洲欧美一级在线| 久久亚洲国产| 青青草国产成人99久久| 伊人久久av| 日本在线一区二区三区| 国产伦久视频在线观看| 亚洲深夜av| 国产精品美女午夜爽爽| 视频一区中文| 欧美激情精品| 视频在线在亚洲| 麻豆视频在线观看免费网站黄| 中文无码日韩欧| 欧美久久天堂| 欧美日一区二区在线观看| 欧美日韩一二三四| 久久丁香四色| 蜜桃久久久久久| 免费看av不卡| 91精品尤物| 好吊视频一区二区三区四区| 久久不见久久见中文字幕免费| 欧美另类综合| 91一区二区| 国产免费av一区二区三区| 亚洲神马久久| 欧洲精品一区二区三区| 国产亚洲久久|