思考⼀个问题:只定义了接口,添加上@FeignClient,真的没有实现的话,能完成远程请求么?
不能,考虑是做了代理了。
先断点验证⼀下这个方法,确实是个代理对象啊!

从@EnableFeignClients 正向切入





接下来,我们主要追踪下另外一行主要的代码registerFeignClients(metadata, registry);


注册客户端,给每一个客户端生成代理对象

所以,下一步,关注FeignClientFactoryBean这个工厂Bean的getObject方法,根据经验,这个方法会返回我们的代理对象
接下来,FeignClientFactoryBean.getObject方法



org.springframework.cloud.openfeign.HystrixTargeter#target



请求进来时候,是进入增强逻辑的,所以接下来我们要关注增强逻辑部分,FeignInvocationHandler

SynchronousMethodHandler#invoke



AbstractLoadBalancerAwareClient#executeWithLoadBalancer()

进入submit方法,我们进⼀步就会发现使用Ribbon在做负载均衡了



最终请求的发起使用的是HttpURLConnection
