feignclient

@EnableFeignClients

@Import(FeignClientsRegistrar.class)

registerBeanDefinitions----

registerDefaultConfiguration(metadata, registry);---client中的configuration选项
registerFeignClients(metadata, registry);--client本身注册到工厂中

registerFeignClient(registry, annotationMetadata, attributes);重写的方法

BeanDefinitionBuilder definition = BeanDefinitionBuilder
.genericBeanDefinition(FeignClientFactoryBean.class);真正注册进去的是这个factorybean

getObject()方法中:

 如果注解里面的url有值,那么用loadbalance方法返回啥

如果不是,Targeter封装一下,DefaultTargeter(或者HystrixTargeter,有fallback方法)的target()方法会调用Feign.Builder的target方法,

return new ReflectiveFeign(handlersByName, invocationHandlerFactory)的newInstance方法;

中间生成一个代理类,这个代理类没有逻辑,只有反射相关的东西,真正的东西,还是在invocationHandlerFactory创建的中间类里面。应该是http请求的封装逻辑,待详细查看

猜你喜欢

转载自www.cnblogs.com/chuliang/p/9208384.html