【问题标题】:feign change the spring autowired priority假装改变弹簧自动装配的优先级
【发布时间】:2017-11-01 11:39:04
【问题描述】:

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

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

例如:

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

@Autowired
private WordDao subjectService;

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

像这样:

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

现在我所有的@Autowired 类都是注入 feign 客户端。

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

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

【问题讨论】:

    标签: spring spring-cloud-feign


    【解决方案1】:

    FeignClient bean 设置为 primary,就像您使用 @Primary 定义 bean 一样。可能这就是为什么 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。

    希望这会有所帮助。

    【讨论】:

    • 知道如何解决两个 impl 问题吗?我尝试使用“相同的变量名”但没有运气。 spring 仍然抱怨两个 impl 并且无法启动服务器
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2012-10-18
    • 2014-07-08
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多