SpringCloud-OpenFeign 源码
Feign 是一个伪 Java Http 客户端 , Feign 不做任何的请求处理。 Feign 通过处理注解生成Request 模板,从而简化了 Http API 的开发。开发人员可以使用注解的方式定制 Request API模板。

Spring启动时,注册@FeignClient:
当程序 的启动类上有@EnableFeignClients 注解。在程序启动后 , 程序会通过包扫描将有@FeignClient注解修饰的接口连同接口名和注解的信息一起取出 ,赋给 BeanDefinitionBuilder,然后根据BeanDefinitionBuilder 得到 BeanDefinition, 最后将 BeanDefinition 注入 IoC 容器中 。

注入 BeanDefinition 之后,通过 JDK 的代理,当调用 Feign Client 接口 里面的方法时 , 该方法会被拦截,源码在 ReflectiveFeign类

在 SynchronousMethodHandler类进行拦截处理,会根据参数生成 RequestTemplate对象,该对象是 H即 请求的模板

评论