【15】Feign动态代理源码分析
文章目录
- 前言
- 核心类
-
- Target接口
- Client
- FeignContext
- Feign
- Targeter
- 流程分析
-
-
- 获取对象
-
-
- 创建上下文、构 建者
-
- 创建Target
-
- 生成代理对象
- 总结
前言
在之前分析了@EnableFeignClients及@FeignClient 是如何进行扫描及读取Feign 接口信息的,最后注解上的信息是被加载为BeanDefinition放入了BeanDefinitionRegistry中,接下来就是加载为Bean 对象了,依据下图(来自于百度)Feign 基本原理,分析下Feign 动态代理机制。

核心类
Target接口
Target接口封装了feign 客户端接口的一些信息,并提供了将RequestTemplate请求模板转化为实际请求的Request的方法。
public interface Target<T> {
// 接口类型
Class<T> type();
// 客户端名称
String name();
//访问URL
String url();
// 将RequestTemplate 请求模板转化为实际请求的Request
Request apply(RequestTemplate var1);
}
Target接口有两个实现类,EmptyTarget和HardCodedTarget。
EmptyTarget意为空的目标,其没有URL属性。
HardCodedTarget意为硬编码目标,Feign 中采用的是这个。
Client
Client就是Feign 直接执行请求的接口,可以看到传入了Request请求对象,及一个Options对象(超时配置)。
public interface Client {
//
Response execute(Request var1, Options var2) throws IOException;
}