spring cloud feign源码解读(一)

在微服务spring cloud 当中一般用的都是openfeign作为微服务之间通讯的解决方案,那么我们在在用的时候需要知其然、知其所以然,这样再遇到问题时能想的地方就会更多以便于排查问题、解决问题。在能力允许的情况下尽量做到去看看源码,看是如何实现的、用了那些东西、如何设计的,这对自己也是一个技术上的提升,下面是个人阅读源码时的一些记录.以下内容需要对spring有深入了解阅读过源码的人。

Openfeign如何集成到项目当中就不在赘述了,可以百度搜索如何集成,下面直接进入主题

1. 在使用的时候都是需要在启动类当中或者配置类上面添加@EnableFeignClients开启feign客户端,那么第一步是通过idea查看该类源码

在这里插入图片描述
如上图是通过Import使用FeignClientsRegistrar对feign客户端进行注,可以通过idea打开该类后面所讲

2. FeignClientsRegistrar,这个feign客户端注册类,主要是初始化feign默认配置,扫描所有包含FeignClient注解的类,然后在组装FeignClientFactoryBean,通过Spring FactoryBean 的方式创建客户端对象注入到容器当中,以下截图只解释重点部分:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Import的加载的源码查看步骤:
AbstractApplicationContext -> refresh() -> invokeBeanFactoryPostProcessors() ->PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors() 获取所有的BeanFactoryPostProcessor实现类,
在上面所有的BeanFactoryPostProcessor中有一个ConfigurationClassPostProcessor,当中包含了处理@Import注解的类,注入到容器当中,如果Import当中指定的类实现了ImportBeanDefinitionRegistrar的话就会调用到该接口提供的方法,让用户可以自己去定义类然后再注入到容器当中。

3. FeignClientFactoryBean,spring 当中创建客户端的核心类,主要是创建feign客户端代理,以下是截图看源码:

在这里插入图片描述在这里插入图片描述
在调用 get(context, Targeter.class),方法时候会通过通过当前feignclient配置的contextId去FeignContext当中获取当前客户端上下文当中的Targeter类,而contextId对应的上下文对象则是AnnotationConfigApplicationContext
有多少个客户端,就有多少个ApplicationContext,通过这个去获取Targeter,这样做可以有效隔离feign当中内部的bean,由于spring容器的父子级关系,内部bean可以获取到我们配置好的bean信息,但是我们没办法获取到feign客户端内部bean的信息,也就是当前启动容器的spring上下文的子容器对象

第一部分就写到这里…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值