Spring Cloud 2.2.2 源码之二十二Feign执行原理一

执行原理

首先是springmvc分发调用到我们这个方法,因为这个是代理对象,于是执行他的invoke方法。
Spring Cloud 2.2.2 源码之二十二Feign执行原理一

FeignInvocationHandler的invoke

其实没做什么,就是直接调用方法处理映射的SynchronousMethodHandlerinvoke

Spring Cloud 2.2.2 源码之二十二Feign执行原理一

SynchronousMethodHandler的invoke

创建了一个请求模板,设置参数,然后进行执行。
Spring Cloud 2.2.2 源码之二十二Feign执行原理一

executeAndDecode

先进行目标请求的配置。
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
可以有拦截器拦截,最后才是目标的配置。
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
设置请求目标,也就是URL
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
然后进行log输出:
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
最后调用LoadBalancerFeignClient来执行。
Spring Cloud 2.2.2 源码之二十二Feign执行原理一

LoadBalancerFeignClient的execute

先创建FeignLoadBalancer.RibbonRequest对象,其实就是封装了一些请求信息。
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
然后获取配置:
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
最终内部是这里,说ribbon的时候说过SpringClientFactory会进行服务名和上下文的绑定,这里传进去就服务名,但是没有上下文,会先创建AnnotationConfigApplicationContext,里面注册一些ribbon相关的配置,最后刷新,所以这里就是把ribbon给初始化了:
Spring Cloud 2.2.2 源码之二十二Feign执行原理一
后面就是要创建FeignLoadBalancer对象,来进行执行啦,下篇说吧。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。