Feign动态代理过程
2021-02-24 14:50:34 0 举报
Feign动态代理过程业务逻辑
作者其他创作
大纲/内容
获取Encoder对象默认是SpringEncoder实现类FeignClientsConfiguration构建
@Autowired注入时,直接去获取动态代理
Spring容器启动
默认是
注入
获取Targeter对象
这里暂时省略
ReflectiveFeign#newInstance方法内
图2
创建Feign.Builder
服务名称ServiceA
获取Feign.Builder对象HystrixFeignConfiguration构建
图1
整合hytrix框架
获取Contract对象默认是SpringMvcContract实现类FeignClientsConfiguration构建
把代理类 T proxy注入到spring上下文中
判断哪个实现类
基于HystrixBuilder.build()+HystrixTargeter生成动态代理
创建发送Http请求的ClientLoadBalancerFeignClient
基于JDK创建代理目标接口类(HardCodedTarget)的动态代理T proxy
获取Logger对象DefaultFeignLoggerFactory构建
获取Decoder对象默认是ResponseEntityDecoder实现类FeignClientsConfiguration构建
基于原生Feign.builder().retryer(retryer)+HystrixTargeter生成动态代理
创建代理目标类HardCodedTarget
服务地址http://ServiceA
请求类型ServiceAClient
获取FeignContext它存放每隔FeignClient对应spring容器spring容器中含有Decoder、Encoder等组件
所有的请求方法都会根据方法名走对应拦截器:MethodHandler(SynchronousMethodHandler)的invoke()方法
程序进入FeignClientFactoryBean#getObject
创建动态代理接口
FeignClientFactoryBean实现FactoryBean、ApplicationContextAware接口
基于Contract等组件解析ServiceAClient接口定义可以知道接口中定义的哪些方法去代理把接口带入:Map(nameToHandler)结构:K(ServiceAClient#每个接口名)—V(SynchronousMethodHandler)Map(methodToHandler)结构:K(接口反射方法名)—V(SynchronousMethodHandler)
0 条评论
回复 删除
下一页