建公司网站要多少钱如何做好网站站内优化
文章目录
- 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容器中。