2017-05-31 41 views
0

我有一个叫做WordDao的接口,叫做WordDaoImpl的抽象类impl。而一些impl类扩展了这个抽象类。假装改变spring autowired的优先级

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

例如:

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

@Autowired 
private WordDao subjectService; 

一切运作良好之前我添加假死。我的假客户端是一个扩展WordDao的接口。

这样的:

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

现在我所有的@Autowired类是注射佯客户端。 autowired result

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

我的问题是:假装注射时是否优先考虑?是不是春天@autowired按名称选择impl类(尝试匹配变量和类/组件名称)?

回答

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与fallback实现时,通常需要primary。 Fallback实现也应该是spring bean,会存在两个实现 - 一个来自FeignClient,另一个来自回退。

希望这有助于。

+0

有关如何解决两个impl问题的任何想法?我试过使用“相同的变量名”,但没有运气。春天仍然抱怨两个impl,并没有启动服务器 – user1686407