前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Feign源码解析

Feign源码解析

作者头像
老梁
发布2019-09-10 18:36:03
4120
发布2019-09-10 18:36:03
举报
文章被收录于专栏:Java工程师成长之路

1. Feign源码解析

1.1. 启动过程

1.1.1. 流程图

1.1.2. 解释说明

  1. Feign解析过程依赖Spring的初始化,它通过实现ImportBeanDefinitionRegistrar接口,来解析注解并进行加载
  2. 自动配置过程和很多框架一样,通过xxxAutoConfiguration进行初始化配置,这里我使用了Hystrix,所以还会额外初始化Hystrix并进行动态代理包装
  3. 同时它实现了一个FactoryBean,对Feign进行包装,之后我们使用的xxxFeign都是包装过的HardCodedTarget,如下图

1.2. 调用过程

  1. String tom = portFeign.feignTest("Tom");进入到ReflectiveFeign类的代理方法
  2. 之后根据调用方法全称找到对应处理器SynchronousMethodHandler
  3. 之后会经过拦截器,该拦截器默认是null的,可以自定义配置
  1. 再进入请求模板RequestTemplateRequest.create(this.method, this.url(), this.headers(), this.requestBody());
  2. 真正进行请求的,是LoadBalancerFeignClient负载均衡客户端,它来负责解析服务和发送请求

1.2.1. 拦截器

  1. 加载位置
  1. 至于拦截器由谁加载,先看FeignClientFactoryBean类,它集成了FactoryBean,所以他实现了getObject方法

1.2.2. FeignClientFactoryBean初始化过程

  1. 我们知道,客户端需要加注解@EnableFeignClients,内容如下
代码语言:javascript
复制
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients {
  1. 它会加载FeignClientsRegistrar类的实例化,而FeignClientsRegistrar实现了接口ImportBeanDefinitionRegistrar,因此,一旦spring一旦实例化它,后续会调用registerBeanDefinitions方法

1.3. 启动过程总流程图

https://www.processon.com/view/link/5cb5790ae4b0841b843185a6 Github地址:https://github.com/tzxylao/learn-demo

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Feign源码解析
    • 1.1. 启动过程
      • 1.1.1. 流程图
      • 1.1.2. 解释说明
    • 1.2. 调用过程
      • 1.2.1. 拦截器
      • 1.2.2. FeignClientFactoryBean初始化过程
    • 1.3. 启动过程总流程图
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档