Spring Cloud OpenFeign源码分析
2021-08-09 14:39:23 2 举报
Spring Cloud OpenFeign源码分析
作者其他创作
大纲/内容
RequestTemplate
MethodMetadata
SynchronousMethodHandler.invoke(args)
ReflectiveFeign.newInstance
动态代理机制(FeignClientInvocationHandler)
Feign.target
FeignClientsRegistrar
decoder
getObject()
父子关系
MethodHandler
获取目标对象实例
注解中增加了Import
Request
动态代理拦截
根据解析出来的元数据,构建RequestTemplate
MethodHander(methodToHandler)
FeignClientFactoryBean.loadBalance
根据接口类的注解声明,解析出底层的MethodHandler
@FeignClient
构建代理对象实例
@Autowired XXXFeignClient xxxFeignClient;
feignclient模版进行解析
BaseContract
Encoder将Bean包装成请求
Response
HTTP通信
Interceptors(LoadBalancerFeignClient)..
Logger
Contract
Bean的注入
encoder
ReflectiveFeign.create()
SpringMvcContract.parseAndValidateMetadata
xxxFeignClient.method();
返回调用结果
动态将Bean装载到IOC容器
MethodHander(defaultMethodHandlers)
MethodHander(nameToHandler)
Http请求逻辑
FeignClientFactoryBean
FactoryBean有一个特征,就是如果需要获得这个bean的真正实例,会通过getObject()方法来实现
ReflectiveFeign.apply
ImportBeanDefinitionRegistrar
FeignClient接口注释内容解析
registerFeignClient()
Request.order
Respose
生成动态代理实现类#ReflectiveFeign.FeignInvocationHandler
HystrixTarget.target
根据方法名称找到对应的MethodHandler进行调用
Contract(SpringMvcContract
dispatch.get(method)).invoke(args)
FeignInvocationHandler.invoke
FeignClientFactoryBean.getObject()
Retry
FeignClientFactoryBean.getTarget
FeignClient被动态注册成了一个FactoryBean
0 条评论
回复 删除
下一页