当前位置: 首页 > news >正文

[SpringCloud] OpenFeign核心架构原理 (三)

文章目录

      • 1.SpringCloud是如何整合Feign的
        • 1.1 将FeignClient接口注册到Spring中
        • 1.2 FeignClientFactoryBean相关

1.SpringCloud是如何整合Feign的

  1. 核心组件重新实现, 支持更多的SpringCloud生态的功能。
  2. 将接口动态代理对象注入到Spring容器中。
1.1 将FeignClient接口注册到Spring中

使用Feign, 必须加上@EnableFeignClients。

在这里插入图片描述

FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar。

在这里插入图片描述

在这里插入图片描述

Spring在启动的时候会调用registerBeanDefinitions方法实现registerBeanDefinitions方法。

在这里插入图片描述

  1. 扫描@EnableFeignClients所在类的包及其子包, 找出所有加了@FeignClient注解的接口, 生成一堆BeanDefinition。
  2. 扫描到的这些接口注册到Spring容器中。

找到加有@FeignClient注解的接口:

在这里插入图片描述

扫描到这些接口, 加入到容器中:

在这里插入图片描述

在这里插入图片描述

在注册的时候, 并不是注册接口的类型, 而是FeignClientFactoryBean类型。

在这里插入图片描述

在这里插入图片描述

@EnableFeignClients其实也就只干了一件核心的事扫描到所有的加了@FeignClient注解的接口, 为每个接口生成一个Bean类型为FeignClientFactoryBean的BeanDefinition, 最后注册进Spring容器。

1.2 FeignClientFactoryBean相关

每个接口都对应一个class类型为FeignClientFactoryBean的BeanDefinition。

在这里插入图片描述

FeignClientFactoryBean是一个FactoryBean, 并且它相关的属性是在生成BeanDefinition的时候设置的。

在这里插入图片描述

并且这个type属性就是代表的接口类型, 由于实现了FactoryBean接口, 所以Spring启动过程中, 一定会调用getObject方法获取真正的Bean对象。getObject最终会走到getTarget方法。

在这里插入图片描述

在这里插入图片描述

通过Feign.builder()来创建动态代理对象, 不过SpringCloud会替换Feign的组件。

Spring是通过FactoryBean的这种方式, 将Feign动态代理对象加入至Spring容器中。

http://www.lryc.cn/news/311931.html

相关文章:

  • elementUI Table组件点击取当前行索引
  • 组基轨迹建模 GBTM的介绍与实现(Stata 或 R)
  • 解决前端性能问题:如何优化大量数据渲染和复杂交互?
  • 【Vue3】深入理解Vue中的ref属性
  • CentOS上安装与配置Nginx
  • DataGrip 连接 Centos MySql失败
  • 【图论】图的遍历 - 构建领接表(无向图)
  • Claude 3家族惊艳亮相:AI领域掀起新浪潮,GPT-4面临强劲挑战
  • Linux Watchdog 机制是什么
  • Linux权限问题
  • python基础练习题目
  • 视频编码标准H.264/AVC,H.265/HEVC,VP8/VP9,AV1的基本原理、优缺点以及适用场景
  • MATLAB2020a安装编译器mingw-64(6.3.0)
  • Python网络请求高级篇:Requests库的深度运用
  • AWS认证
  • 【排序】详解插入排序
  • Linux开发板移植rz、sz指令实现串口传输文件
  • Android抓包--不走代理的请求Proxy.NO_PROXY,过代理检测,burpsuite+Postern
  • SQL教学: MySQL进阶操作详解--探索DML语句的高级用法
  • JavaScript命名标识符规范,JavaScript的for循环与双重for循环
  • Qt/自定义控件的封装
  • 【硬件相关】RDMA网络类别及基础介绍
  • POS 之 ETH质押现状
  • Qt之插件
  • Tensorflow2.0+部署(tensorflow/serving)过程备忘记录Windows
  • Docker的安装跟基础使用一篇文章包会
  • SQL技巧笔记(一):连续3人的连号问题—— LeetCode601.体育馆的人流量
  • LeetCode 1976.到达目的地的方案数:单源最短路的Dijkstra算法
  • vulnhub-----Hackademic靶机
  • 十秒学会Ubuntu命令行:从入门到进阶