我是靠谱客的博主 明亮外套,最近开发中收集的这篇文章主要介绍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上下文的子容器对象

第一部分就写到这里…

最后

以上就是明亮外套为你收集整理的spring cloud feign源码解读(一)的全部内容,希望文章能够帮你解决spring cloud feign源码解读(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部