【OpenFeign】【源码+图解】【一】HelloWorld及其工作原理
3. 注册OpenFeign接口的实例
从HelloWorld中我们看到需要显示加入**@EnableFeignClients注解才能开启openFeign的功能,因此它就成为我们分析openFeign**的入口,先看下这个Annotation的属性
@Import(FeignClientsRegistrar.class) // 这个注册类是关键
public @interface EnableFeignClients {
// 扫描的包,用于寻找open-feign客户端
String[] value() default {
};
// 与value()一样
String[] basePackages() default {
};
// 与value()的字符串不同,这里用的是Class类
Class<?>[] basePackageClasses() default {
};
// 这里声明的配置会在所有的open-feign的clients生效
Class<?>[] defaultConfiguration() default {
};
// @FeignClient声明的类,如果不为空的话前面的包扫描会失效
Class<?>[] clients() default {
};
}
先看下FeignClientsRegistrar的类图
从类图中可以看出FeignClientsRegistrar有以下作用
- 注册beans
- 获取配置Environment
- 获取资源加载器ResourceLoader
那么,接下来我们就开始分析FeignClientsRegistrar要注册哪些beans,入口是实现ImportBeanDefinitionRegistrar接口的registerBeanDefinitions
方法
class FeignClientsRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware {
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry)