OpenFeign 架构原理(七):OpenFeign 解析 MVC 注解的原理

·  阅读 124

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

上次我们深入讲解了 Ribbon 的架构原理,这次我们再来看下 Feign 远程调用的架构原理。

上次我们已经梳理了 OpenFeign 动态代理原理,接着我们就来顺着这个核心流程来讲解 OpenFeign ## 解析 MVC 注解的原理。

本文以开源 SpringCloud 项目 PassJava 作为示例。

开源地址: github.com/Jackson0714…

喜欢的小伙伴来点个 Star 吧,冲 2K Star。

解析 MVC 注解的原理

上面我们讲到了接口上是有一些注解的,比如 @RequestMapping,@PathVariable,这些注解统称为 Spring MVC 注解。但是由于 OpenFeign 是不理解这些注解的,所以需要进行一次解析

解析的流程图如下:

解析的类就是 SpringMvcContract 类,调用 parseAndValidateMetadata 进行解析。解析完之后,就会生成元数据列表。源码如下所示:

List<MethodMetadata> metadata = contract.parseAndValidateMetadata(target.type());
复制代码

这个类在这个路径下,大家可以自行翻阅下如何解析的,不在本篇的讨论范围内。

https://github.com/spring-cloud/spring-cloud-openfeign/blob/main/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java
复制代码

这个元数据 MethodMetadata 里面有什么东西呢?

  • 方法的定义,如 StudyTimeFeignService 的 getMemberStudyTimeList 方法。
  • 方法的参数类型,如 Long。
  • 发送 HTTP 请求的地址,如 /study/studytime/member/list/test/{id}。

然后每个接口方法就会有对应的一个 MethodHandler,它里面就包含了元数据,当我们调用接口方法时,其实是调用动态代理对象的 MethodHandler 来发送远程调用请求的。

上面我们针对 OpenFeign 框架如何为 FeignClient 接口生成动态代理已经讲完了,下面我们再来看下当我们调用接口方法时,动态代理对象是如何发送远程调用请求的。

我是悟空,期待与你一起打怪升级变强,我们下期见。

作者简介:悟空,8年一线互联网开发和架构经验,用故事讲解分布式、架构设计、Java 核心技术。《JVM性能优化实战》专栏作者,开源了《Spring Cloud 实战 PassJava》项目,公众号:悟空聊架构。本文已收录至 www.passjava.cn

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改