个人做的小网站需要备案东莞市招投标交易中心
文章目录
- 1.SpringCloud是如何整合Feign的
 - 1.1 将FeignClient接口注册到Spring中
 - 1.2 FeignClientFactoryBean相关
 
1.SpringCloud是如何整合Feign的
- 核心组件重新实现, 支持更多的SpringCloud生态的功能。
 - 将接口动态代理对象注入到Spring容器中。
 
1.1 将FeignClient接口注册到Spring中
使用Feign, 必须加上@EnableFeignClients。

FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar。


Spring在启动的时候会调用registerBeanDefinitions方法实现registerBeanDefinitions方法。

- 扫描@EnableFeignClients所在类的包及其子包, 找出所有加了@FeignClient注解的接口, 生成一堆BeanDefinition。
 - 扫描到的这些接口注册到Spring容器中。
 
找到加有@FeignClient注解的接口:

扫描到这些接口, 加入到容器中:


在注册的时候, 并不是注册接口的类型, 而是FeignClientFactoryBean类型。


@EnableFeignClients其实也就只干了一件核心的事扫描到所有的加了@FeignClient注解的接口, 为每个接口生成一个Bean类型为FeignClientFactoryBean的BeanDefinition, 最后注册进Spring容器。
1.2 FeignClientFactoryBean相关
每个接口都对应一个class类型为FeignClientFactoryBean的BeanDefinition。

FeignClientFactoryBean是一个FactoryBean, 并且它相关的属性是在生成BeanDefinition的时候设置的。

并且这个type属性就是代表的接口类型, 由于实现了FactoryBean接口, 所以Spring启动过程中, 一定会调用getObject方法获取真正的Bean对象。getObject最终会走到getTarget方法。


通过Feign.builder()来创建动态代理对象, 不过SpringCloud会替换Feign的组件。
Spring是通过FactoryBean的这种方式, 将Feign动态代理对象加入至Spring容器中。
