代码实现
我们从@EnableFeignClients这个配置进入,通过这个配置我们就开启了Feign客户端。
从上面@Import导入的方式实现把实例FeignClientsRegistrar加入spring的IOC容器中,扫描声明@FeignClient接口,FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar并且重写了registerBeanDefinitions方法。
ImportBeanDefinitionRegistrar是Spring的一个扩展点,会扫描每一个包含@FeignClient接口的类
我们会通过BeanDefinitionHolder封装我们扫描的接口,然后把设置各种元数据信息。最终通过registerBeanDefinition把这些注册到Spring的工厂当中。
从上面我们知道FeignClientFactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,FeignClientFactoryBean实现了FactoryBean并重写了getObject
调用Targeter的target方法会使用动态代理生成@FeignClient接口的代理对象
总结
从我们增加@EnableFeignClients注解开始,当我们启动应用的时候,系统就会扫描所有的包里面带有@FeignClient接口的类,并为此生成代理对象,这个代理对象会设置我们写的各种配置与拦截器,并最终注入到Spring的IOC容器中,当我们调用@FeignClient接口的类的方法时,其实是调用的生成的代理的方法。
领取专属 10元无门槛券
私享最新 技术干货