【14】@FeignClient注解源码分析
文章目录
- 前言
- 作用
- 属性配置
- 流程解析
-
-
- 获取客户端名称
-
-
- 获取configuration
-
- 注册客户端
前言
在上篇文档中@EnableFeignClients注解,扫描@FeignClient注解表示的接口,并将加载到容器中,接下来分析下@FeignClient注解配置项及加载流程。
作用
标记接口为Feign 客户端,Feign 启动会扫描当前接口及注解属性,加载到容器中,执行时,通过IOC中当前注解对应的FactoryBean对象,创建动态代理对象,然后去执行请求流程
属性配置
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface FeignClient {
// 指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
@AliasFor("name")
String value() default "";
//
/** @deprecated */
@Deprecated
String serviceId() default "";
// 每个客户端,对应不用的上下文,这里就是这个上下文的ID,
// 当name属性一样时,可以自定义这个ID,来解决冲突问题
String contextId() default "";
@AliasFor("value")
String name() default "";
String qualifier() default "";
// 指定@FeignClient调用的IP地址,一般都是服务发现,所以不需要配置
String url() default "";
// 是否解码404,404时,会返回NULL对象,不建议配置
boolean decode404() default false;
// Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
Class<?>[] configuration() default {
};
// 定义容错的处理类,当调用远程接口失败或超时时,
// 会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
Class<?> fallback() default void.class;
// 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
Class<?> fallbackFactory() default void.class;
// 定义当前FeignClient的统一前缀
String path() default "";
// 是否是primary
boolean primary() default true;
}