Feign的工作原理[通俗易懂]

Feign的工作原理[通俗易懂]Feign的工作原理Feign是一个伪JavaHttp客户端,Feign不做任何的请求处理。Feign通过处理注解生成Request模板,从而简化了HttpAPI的开发。开发人员可以使用注解的方式定制RequestAPI模板。在发送HttpRequest请求之前,Feign通过处理注解的方式替换掉Request模板中的参数,生成真正的Request,并交给JavaHttp客户端去处理。利用这种方式,开发者只需要关注Feign注解模板的开发,而不用关注Http请求本身,简化了Http请求

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Feign的工作原理

Feign是一个伪Java Http 客户端,Feign 不做任何的请求处理。Feign 通过处理注解生成Request模板,从而简化了Http API 的开发。开发人员可以使用注解的方式定制Request API模板。

在发送Http Request请求之前,Feign通过处理注解的方式替换掉Request模板中的参数,生成真正的Request,并交给Java Http客户端去处理。利用这种方式,开发者只需要关注Feign注解模板的开发,而不用关注Http请求本身,简化了Http请求的过程,使得Http请求变得简单和容易理解。

Feign通过包扫描注入FeignClient的Bean,该源码在FeignClientsRegistrar 类中。首先在程序启动时,会检查是否有@EnableFeignClients注解,如果有该注解,则开启包扫描,扫描被@FeignClient注解的接口。代码如下:
在这里插入图片描述
当程序的启动类上有@EnableFeignClients注解。在程序启动后,程序会通过包扫描将有@FeignClient注解修饰的接口连同接口名和注解的信息一起取出, 赋给BeanDefinitionBuilder,然后根据BeanDefinitionBuilder得到BeanDefinition,最后将BeanDefinition注入IoC容器中,源码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注入BeanDefinition之后,通过JDK的代理,当调用Feign Cliet接口里面的方法时,该方法会被拦截,源码在ReflectiveFeign类:
在这里插入图片描述
在SynchronousMethodHandler类进行拦截粗粒,会根据参数生成RequestTemplate对象,该对象是Http请求的模板:
在这里插入图片描述
在上述代码中,有一个executeAndDecode()方法,该方法通过RequestTemplate生成Request请求对象,然后通过Http Client获取Response,即通过Http Client进行Http请求来获取响应:

总结

总的来说,Feign 的源码实现过程如下。

  1. 首先通过@EnableFeignClients注解开启FeignClient 的功能。只有这个注解存在,才会在程序启动时开启对@FeignClient注解的包扫描。
  2. 根据Feign的规则实现接口,并在接口上面加上@FeignClient注解。
  3. 程序启动后,会进行包扫描,扫描所有的@ FeignClient 的注解的类,并将这些信息注入IoC容器中。
  4. 当接口的方法被调用时,通过JDK的代理来生成具体的RequestTemplate模板对象。
  5. 根据RequestTemplate再生成Http请求的Request对象。
  6. Request 对象交给Client去处理,其中Client的网络请求框架可以是HtpURLConnection、HttpClient和OkHttp。
  7. 最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186016.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言的fprintf函数的用法,fprintf 和fscanf 函数

    c语言的fprintf函数的用法,fprintf 和fscanf 函数C语言的fprintf和fscanf函数fprintf()函数用于将一组字符写入文件。它将格式化的输出发送到流。fprintf()函数的语法如下:intfprintf(FILE*stream,constchar*format[,argument,…])示例:创建一个源文件:fprintf-write-file.c,其代码如下-#includemain(){FILE…

    2022年10月18日
    2
  • nginx ssl配置详解_nginx实现内外网同时访问

    nginx ssl配置详解_nginx实现内外网同时访问1、nginx.conf添加includeproxy.conf2、配置proxy.confserver{ listen80;listen443ssl; server_name域名1; indexindex.jspindex.htmlindex.htmlindex.shtml; ssl_certificate域名1.com.pem;#ssl证书路径 ssl_certificate_key域名1.com.key;.

    2022年10月2日
    3
  • MATLAB矩阵的基本运算及操作

    MATLAB矩阵的基本运算及操作

    2022年6月25日
    26
  • PAT乙级题解

    PAT乙级题解题号C/C++B1001

    2022年5月11日
    44
  • 阿里java高级工程师面试100题「建议收藏」

    阿里java高级工程师面试100题「建议收藏」大型网站架构技术QQ群:3686148491,java堆,分新生代老年代,新生代有Eden,fromsurviver,tosurviver三个空间,堆被所有线程共。eden内存不足时,发生一次minorGC,会把fromsurvivor和eden的对象复制到tosurvivor,这次的to survivor就变成了下次的fromsurvivor,经过多次minorGC,默认15次…

    2022年6月9日
    58
  • 三菱fx3u步进梯形图程序实例_三菱步进梯形图

    三菱fx3u步进梯形图程序实例_三菱步进梯形图三菱FX2NPLC步进指令与步进梯形图顺序流程的SFC表示选择流程的SFC表示选择性分支选择性汇合并行流程的SFC表示并行性分支并行性汇合小结顺序流程的SFC表示选择流程的SFC表示选择性分支选择性汇合并行流程的SFC表示并行性分支并行性汇合小结实际上在这里,选择性可以看做是传统电路上的并联(满足条件),而并行性就可以看做是传统电路上的串联(必须全部满足)…

    2022年9月10日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号