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

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

Spring Cloud Feign原理詳解

瀏覽:22日期: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久久,三上悠亚国产精品一区二区三区
日韩三区免费| 日韩一区二区中文| 怡红院精品视频在线观看极品| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲电影有码| 久久精品免费一区二区三区| 婷婷综合电影| 国产三级一区| 九九九精品视频| 91偷拍一区二区三区精品| 欧美国产一级| 中文在线а√天堂| 99综合视频| 日韩美女精品| 国产欧美日韩在线观看视频| 日韩高清国产一区在线| 美日韩一区二区三区| 国产99精品一区| 伊人久久国产| 日韩一区二区免费看| 亚洲欧洲国产精品一区| 中文字幕亚洲在线观看| 国产精品入口久久| 亚洲影视一区二区三区| 波多野结衣久久精品| 亚洲aⅴ网站| 日韩精品看片| 青青国产精品| 美女91精品| 夜鲁夜鲁夜鲁视频在线播放| 红杏一区二区三区| 日韩专区欧美专区| 婷婷亚洲五月| 国产视频网站一区二区三区| 欧美午夜精彩| 久久免费视频66| 日韩精品麻豆| 国产精品99一区二区三| 日韩精品久久理论片| 亚洲午夜黄色| 在线观看精品| 国产不卡精品在线| 91精品国产自产精品男人的天堂| 亚洲高清av| 91看片一区| 精品伊人久久久| 欧美在线观看天堂一区二区三区| 视频一区二区三区在线| 激情久久久久久久| 国产粉嫩在线观看| 免费看久久久| 98精品视频| 国产一区二区三区黄网站 | 日韩欧美精品一区二区综合视频| 亚洲韩日在线| 99成人在线视频| 亚洲免费福利| 天堂av在线| 久久精品欧美一区| 日韩精品诱惑一区?区三区| 粉嫩av一区二区三区四区五区 | 久久成人一区| 99精品美女| 国产aⅴ精品一区二区四区| 日本成人手机在线| 亚洲精品护士| 日本免费一区二区视频| 日韩av在线播放中文字幕| 国产一区二区久久久久| 日韩综合小视频| 首页国产欧美久久| 一区二区三区四区精品视频| 麻豆久久精品| 午夜在线视频一区二区区别| 国产高清久久| 激情婷婷欧美| 日本aⅴ亚洲精品中文乱码| 国产精品一区二区精品| 极品av在线| 国产一区二区精品福利地址| 免费在线欧美黄色| 日韩国产精品久久久久久亚洲| 成人va天堂| 欧美日韩精品一本二本三本| 亚洲福利精品| 午夜宅男久久久| 久久国产主播| 免费在线观看精品| 91伊人久久| 亚洲播播91| 深夜福利一区| 国产精品欧美三级在线观看 | 国产精品美女久久久浪潮软件| 欧美在线资源| 欧美 日韩 国产一区二区在线视频| 日韩精品dvd| 成人国产综合| 久久九九精品| 九九久久婷婷| 欧美三级网址| 蜜桃成人av| 午夜久久久久| 日韩精品免费视频人成| 日韩中文字幕视频网| 国产精品xxx在线观看| 欧美二三四区| 日本成人在线不卡视频| 成人日韩av| 日本欧美一区二区在线观看| 成人在线免费观看91| 日韩午夜av在线| 久久av导航| 日韩有码av| 99精品在线| 国产欧美高清视频在线| 国内亚洲精品| 亚洲伊人av| 欧美激情 亚洲a∨综合| 麻豆一区在线| 综合视频一区| 激情久久中文字幕| 日韩av午夜在线观看| 国产欧洲在线| 蜜桃av一区二区在线观看| 日韩精品电影| 麻豆久久一区| 日本色综合中文字幕| 亚洲少妇自拍| av一区二区高清| 日本午夜免费一区二区 | 亚洲欧美网站| 精品中文一区| 国产欧美日韩综合一区在线播放| 日韩中文影院| 狠狠久久伊人| 国产精品亚洲综合久久| 日韩国产欧美视频| 伊人久久亚洲热| 久久中文字幕av一区二区不卡| 国产一区福利| 日本蜜桃在线观看视频| 亚洲不卡系列| 好看的av在线不卡观看| 精品久久久亚洲| 日韩综合在线| 日本美女一区| 精品国产欧美日韩| 精品一区91| 国产videos久久| sm捆绑调教国产免费网站在线观看| 日韩av一区二区在线影视| 首页欧美精品中文字幕| 亚洲风情在线资源| 欧美一级二区| 动漫av一区| 国产日韩亚洲欧美精品| 日韩一区二区三免费高清在线观看 | 一本色道久久精品| 日韩精品免费视频一区二区三区| 日韩福利视频导航| 国产情侣一区| 国产亚洲精品美女久久| 国产极品模特精品一二| 日韩电影免费在线观看| 欧美资源在线| 麻豆91精品视频| 99热免费精品| **爰片久久毛片| 成人片免费看| 日韩高清在线一区| 日韩精品免费一区二区在线观看| 蜜臀精品一区二区三区在线观看 | 综合精品一区| 成人日韩在线| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美日韩国产一区二区三区不卡 | 麻豆亚洲精品| 国产综合色区在线观看| 最新亚洲国产| 日韩精品dvd| 日本亚洲最大的色成网站www | 少妇精品久久久| 婷婷成人基地| 精品精品99| 日日夜夜免费精品| 一区二区三区四区在线看| 国产精品久久国产愉拍| 蜜桃视频第一区免费观看| 欧美日韩在线二区| 欧美日韩视频网站| 国产乱人伦丫前精品视频| 丝袜美腿一区二区三区| 丝袜诱惑一区二区| 久久中文字幕一区二区三区| 日韩精品免费视频一区二区三区| 视频一区二区三区入口| 狠狠久久婷婷| 欧美sss在线视频| 欧美午夜不卡影院在线观看完整版免费| 青青久久av|