openFeign源码学习

本文详细介绍了openFeign的使用方式和源码解析,包括如何通过@EnableFeignClients注解启动,FeignClientsRegistrar注册逻辑,以及FeignClientFactoryBean在bean初始化中的关键作用。在方法调用时,openFeign通过代理对象动态构建HTTP请求,利用SynchronousMethodHandler处理请求,根据是否使用微服务名选择不同的客户端执行逻辑,如Default或LoadBalancerFeignClient的execute方法。
摘要由CSDN通过智能技术生成

openFeign这个框架要解决的问题是:通常在调用远程接口的时候,如果是http请求,需要我们通过restTemplate去拼接调用参数和连接,然后发起调用,openFeign帮我们把拼接参数的这个过程包装了起来,通过代理对象的模式,帮我们构建http请求,而我们在使用的时候,就向写mybatis中的mapper接口一样,即可

openFeign的源码,看起来是比较简单的,如果有看过spring的源码,看起来就会快很多

1.使用

在使用的时候
引入jar包

<dependency>
   <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
 </dependency>

然后在启动类上,加上@EnableFeignClients注解

最后,在我们定义的接口上,加上@FeignClient注解

@FeignClient注解所要修饰的接口,是我们在自己的应用中定义的,需要和调用的远程接口定义保持一模一样

在这里插入图片描述

在这里插入图片描述

2.源码

我们从启动类上的注解开始来看,通常在这个注解中,会有一些逻辑的处理
在这里插入图片描述

我们可以看到,FeignClientsRegistrar是ImportBeanDefinitionRegistrar的实现类,ImportBeanDefinitionRegistrar是spring提供的扩展点之一,我们可以在其实现方法中,自己注入对象到beanDefinitionMap集合中
在这里插入图片描述

2.1 registerDefaultConfiguration

可以看到,在实现方法中,有两个方法,registerDefaultConfiguration这个方法的逻辑看起来比较简单,就是根据@EnableFeignClients注解,build了一个beanDefinition对象,然后注入到了beanDefinitionMap集合中
在这里插入图片描述
在这里插入图片描述

2.2 registerFeignClients

我们需要关注的是第二个方法:registerFeignClients(),

public void registerFeignClients(AnnotationMetadata metadata,
			BeanDefinitionRegistry registry) {
   
	// 1.初始化一个扫描器,是为了去指定的包下,扫描指定的bean
	ClassPathScanningCandidateComponentProvider scanner = getScanner();
	scanner.setResourceLoader(this.resourceLoader);

	Set<String> basePackages;

	Map<String, Object> attrs = metadata
			.getAnnotationAttributes(EnableFeignClients.class.getName());
	AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter(
			FeignClient.class);
	final Class<?>[] clients = attrs == null ? null
			: (Class<?>[]) attrs.get("clients");
	//如果@Enable注解中没有指定client,会走这里的逻辑
	if (clients == null || clients
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值