0

我有一个叫 WordDao 的接口,一个叫 WordDaoImpl 的抽象类 impl。一些 impl 类扩展了该抽象类。

当我注入它们时,我使用相同的变量名。

前任:

@Component("subjectService")
public class SubjectDaoImpl extends WordDaoImpl;

@Autowired
private WordDao subjectService;

在我添加假装之前一切正常。我的 feign 客户端是一个扩展 WordDao 的接口。

像这样:

@FeignClient("Noun")
public interface NounClient extends WordDao;

现在我所有的@Autowired 类都是注入 feign 客户端。 自动连线结果

我试图从我的 feign 客户端中删除“扩展 WordDao”,它再次运行良好,但我不知道为什么。

我的问题是:feign 在注入时是否具有最高优先级?spring @autowired 不是按名称选择 impl 类吗(尝试匹配变量和类/组件名称)?

4

1 回答 1

1

FeignClient bean 的设置primary就像您使用@Primary. 可能这就是为什么 FeignClient bean 被设置为优先级的原因。幸运的是,它可以从spring-cloud-netflix 1.3.0进行配置。您可以将它与Dalston版本一起使用。

请尝试更改您的代码,如下所示。

@FeignClient(name = "Noun", primary = false)
public interface NounClient extends WordDao;

您应该注意的一件事是,当您使用 FeignClient 和回退实现时,通常需要 primary。Fallback 实现也应该是 spring bean,存在两种实现 - 一个来自 FeignClient,另一个来自 fallback。

希望这会有所帮助。

于 2017-06-01T01:39:28.610 回答