# Feign 原理简述
- @EnableFeignClients 开启扫描,扫描包下的所有 @FeignClient,然后注入到 IOC 容器中。
- 调用 feign 接口,通过 JDK 动态代理生成 RequestTemplate。
- RequestTemplate 是模版,包含请求所有信息,然后生成 Request,Request 交给 client 处理,client 默认是 JDK 的 HTTPUrlConnection,也可以是 OKHttp、Apache 的 HTTPClient 等。
- client 封装成 LoadBalanceClient,结合 ribbon 负载均衡发起调用。
- 调用失败,还有 hystrix 熔断。
Feign、hystrix 与 retry 的关系请参考 https://xli1224.github.io/2017/09/22/configure-feign/
# @EnableXxxx 原理
- @EnableXxxx 注解都包含一个 @Import 注解,指定配置类。 [嵌套多一层是为了隐藏细节(配置类,这个使用者不用关注),方便使用者使用,使用者直接一个注解即可,不用任何配置]
- @Import 注解的配置类,需要实现接口 ImportSelector,以及实现方法 selectImports,入参是注解元数据,出参是需要导入的类 String []