page contents

关于fegin动态代理的一些疑惑

Pack 发布于 2020-03-03 18:05
阅读 1053
收藏 0
分类:Java开发

我们在使用fegin的时候,一般定义如下@FeginClient接口:

attachments-2020-03-rTqDsSyM5e5e2bac20eb7.png


然后在使用的时候,通过@Autowired就会自动给接口注入一个代理对象。但是定义fegin接口的同时,也定义了fallback类型的类,该类同样实现了@FeginClient的接口


attachments-2020-03-h0ZQRnFI5e5e2bb2c6155.png

那么问题来了,在spring容器里面,对于clientservice这个接口,就出现了两个实现类,一个是fegin的动态代理类,一个是fallback的实现类,那么在依赖注入的时候,就应该报错,但是。。。。并没有报错,所以请问,fegin是如何做到的

516
Pack
Pack

仔细看了下题主的实现,很怪吧,为什么这么写?正常来说是存在两个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的时候自己会先尝试解决的,这属性是解决的一种,还有就是属性名称,具体代码题主可以找下

请先 登录 后评论