Feign远程调用的底层方法逻辑

今天在写业务的时候,需要通过feign调用远程接口,平常只是调用就行了,没有了解到他是如何代码实现的,今天就使用debug来解开feign为什么可以远程调用的面纱。
希望看本文章的同学朋友们,可以自己写一个简单的远程调用方法跟着我一起走一遍debug,自己走一遍debug比过硬看文章十遍。
首先,我们在需要调用远程接口的地方,打上断点。
断点调试

ReflectiveFeign.java

然后我们使用IDEA的step Into进入方法内部(不是hasStock方法)
首先我们会进入这个类里边ReflectiveFeign.java并且,我们发现它继承抽象类feign
并且我们进入的invoke方法是在一个名为FeignInvocationHandler的静态内部类内,这个类实现接口InvocationHandler
invoke
此时我们把目光放在invoke方法上边

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
   
      if ("equals".equals(method.getName())) {
   
        try {
   
          Object otherHandler =
              args.length > 0 && args[0] != null ? Proxy.getInvocationHandler(args[0]) : null;
          return equals(otherHandler);
        } catch (IllegalArgumentException e) {
   
          return false;
        }
      } else if ("hashCode".equals(method.getName())) {
   
        return hashCode();
      } else if ("toString".equals(method.getName())) {
   
        return toString();
      }

      return dispatch.get(method).invoke(args);
    }

他会判断我们是否调用的是equalshashCode还是toString方法,如果是的话,会进行不同的逻辑处理,以上代码都有,我相信看本文章的朋友们都会很轻松的看出他所做的逻辑处理,我就在此不做赘述。
接下来的dispatch.get(method).invoke(args)才是我们今天的重头戏,那我们直接进入invoke方法,看看他里边都做了什么事情吧~

SynchronousMethodHandler

我们会进入到SynchronousMethodHandler.java里,它实现MethodHandler本文不多关注这些内容,重要的是我们进入到的invoke方法

public Object invoke(Object[] argv) throws Throwable {
   
    RequestTemplate template = buildTemplateFromArgs.create(argv)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值