深圳网站建设易佰讯,明灯赣州网络推广,抽奖网站建设,企业vi品牌设计公司文章目录 1.SpringCloud是如何整合Feign的1.1 将FeignClient接口注册到Spring中1.2 FeignClientFactoryBean相关 1.SpringCloud是如何整合Feign的
核心组件重新实现, 支持更多的SpringCloud生态的功能。将接口动态代理对象注入到Spring容器中。
1.1 将FeignClient接口注册到S… 文章目录 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容器中。