代码实现

我们从@EnableFeignClients这个配置进入,通过这个配置我们就开启了Feign客户端。

Spring Cloud Feign源码分析

 

Spring Cloud Feign源码分析

 

从上面@Import导入的方式实现把实例FeignClientsRegistrar加入spring的IOC容器中,扫描声明@FeignClient接口,FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar并且重写了registerBeanDefinitions方法。

Spring Cloud Feign源码分析

 

ImportBeanDefinitionRegistrar是Spring的一个扩展点,会扫描每一个包含@FeignClient接口的类

Spring Cloud Feign源码分析

 

我们会通过BeanDefinitionHolder封装我们扫描的接口,然后把设置各种元数据信息。最终通过registerBeanDefinition把这些注册到Spring的工厂当中。

Spring Cloud Feign源码分析

 

从上面我们知道FeignClientFactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,FeignClientFactoryBean实现了FactoryBean并重写了getObject

Spring Cloud Feign源码分析

 

调用Targeter的target方法会使用动态代理生成@FeignClient接口的代理对象

Spring Cloud Feign源码分析

 

Spring Cloud Feign源码分析

总结

​从我们增加@EnableFeignClients注解开始,当我们启动应用的时候,系统就会扫描所有的包里面带有@FeignClient接口的类,并为此生成代理对象,这个代理对象会设置我们写的各种配置与拦截器,并最终注入到Spring的IOC容器中,当我们调用@FeignClient接口的类的方法时,其实是调用的生成的代理的方法。

落魄程序员在线求关注! 欢迎关注我的公众号!

Spring Cloud Feign源码分析

 

 

相关文章:

  • 2021-07-05
  • 2019-08-02
  • 2019-03-04
  • 2020-06-02
  • 2021-09-19
  • 2021-02-11
  • 2018-05-26
  • 2019-05-28
猜你喜欢
  • 2019-07-20
  • 2021-06-01
  • 2019-01-16
  • 2019-11-05
  • 2021-09-05
  • 2019-10-31
  • 2019-10-11
  • 2019-07-19
相关资源
相似解决方案