【OpenFeign】【源码+图解】【二】注册OpenFeign接口的实例
目录
4. FeignClient的配置信息
上一节中利用FeignClientFactoryBean创建@FeignClient接口的实例client,使用的时候通过**FeignClientFactoryBean.getObject()获得。本节分两步介绍:1、认识FeignClientFactoryBean ** 2、FeignClientFactoryBean.getObject()
4.1 FeignClientFactoryBean
先看下它的类图
先看下它的属性,它的属性基本是从**@FeignClient的属性赋值过来的,参考前面一节;再看它实现的接口,其中FactoryBean**的getObject
则是分析的重点
4.2 FeignClientFactoryBean.getObject()
先看下其总体流程图
整个流程主要分两部分
- 从FeignContext获取各种beans
- 将beans赋值给Feign.Builder,主要是承接yml文件中feign的配置,或者@FeignClient.configuration的配置,或者@EnableFeignClients.defaultConfiguration
- 通过工具类Targeter类创建instance
接下来我们逐一分析
4.2.1 FeignContext
如果看过前面关于LoadBalance的3.2节文章就会了解NamedContextFactory,这里不再详细分析。
对于FeignContext它是在Spring启动的时候通过FeignAutoConfiguration注入容器的
看下FeignAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Feign.class)
@EnableConfigurationProperties({
FeignClientProperties.class, // yml文件中feign.client.*的配置
FeignHttpClientProperties.class, // yml文件中feign.httpclient.*的配置
FeignEncoderProperties.class }) // yml文件中feign.encoder.*的配置
public class FeignAutoConfiguration {
@Autowired(required = false)
// configurations即@EnableFeignClients.defaultConfiguration和@FeignClient.configuration,参考FeignClientsRegistrar的流程图
private List<FeignClientSpecification> configurations = new ArrayList<>();
@Bean
public FeignContext feignContext(