zoukankan      html  css  js  c++  java
  • Feign源码解析

    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的,可以自定义配置
    4. 再进入请求模板RequestTemplateRequest.create(this.method, this.url(), this.headers(), this.requestBody());
    5. 真正进行请求的,是LoadBalancerFeignClient负载均衡客户端,它来负责解析服务和发送请求

    1.2.1. 拦截器

    1. 加载位置

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



    1.2.2. FeignClientFactoryBean初始化过程

    1. 我们知道,客户端需要加注解@EnableFeignClients,内容如下
    @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

  • 相关阅读:
    select接收后台返回值的解决方案
    junit 使用
    jsoup解析HTML及简单实例
    面向接口编程及适配器模式
    数据库 SQL语句小结(更新中)
    最近关于虚拟机的学习
    AQS源码解析
    ReentrantLock源码阅读记录(二)之ReentrantReadWriteLock
    Semaphore 源码解读
    Httpclient学习多一点儿
  • 原文地址:https://www.cnblogs.com/sky-chen/p/10718759.html
Copyright © 2011-2022 走看看