我们在使用fegin的时候,一般定义如下@FeginClient接口:
然后在使用的时候,通过@Autowired就会自动给接口注入一个代理对象。但是定义fegin接口的同时,也定义了fallback类型的类,该类同样实现了@FeginClient的接口
那么问题来了,在spring容器里面,对于clientservice这个接口,就出现了两个实现类,一个是fegin的动态代理类,一个是fallback的实现类,那么在依赖注入的时候,就应该报错,但是。。。。并没有报错,所以请问,fegin是如何做到的
仔细看了下题主的实现,很怪吧,为什么这么写?正常来说是存在两个Bean,因为FeiginClient也会生成一个beanDefinition注入进去,而且name属性设置就是当前的className,正常会冲突的,但是因为FeignClient这个注解上有一个属性:
/**
* @return whether to mark the feign proxy as a primary bean. Defaults to true.
*/
boolean primary() default true;
这属性干嘛的不用说吧,再看下FeignClient注册的时候:
boolean primary = (Boolean) attributes.get(“primary”); // has a default, won’t be null
beanDefinition.setPrimary(primary);
Spring在发现多个匹配Bean的时候自己会先尝试解决的,这属性是解决的一种,还有就是属性名称,具体代码题主可以找下