首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有定义[blah]类型的唯一bean :期望的单个匹配bean,但是找到了2 [moreBlah]

没有定义[blah]类型的唯一bean :期望的单个匹配bean,但是找到了2 [moreBlah]
EN

Stack Overflow用户
提问于 2014-03-17 21:50:47
回答 2查看 1.7K关注 0票数 1

我已经尽力修复了这个错误,但是spring似乎无法区分基本holdService和它的子activationHoldService。

代码语言:javascript
复制
@Component("ActivationHoldService")
public class ActivationHoldServiceImpl extends HoldServiceImpl {

@Component("BaseHoldService")
public class HoldServiceImpl implements HoldService {

@Component("com.erac.vos.webservice.hold.HoldWebServiceValidator")
public class HoldWebServiceValidator extends BaseValidator {
  private static final Log LOG = LogFactory.getLog(
      com.erac.vos.webservice.hold.HoldWebServiceValidator.class);
  @Autowired
  @Qualifier("BaseHoldService")
  private HoldService holdService;

我正在尝试自动读取HoldService,但是我一直收到错误消息

无法自动生成字段:私有com.erac.vos.webservice.vehicle.hold.HoldWebServiceValidator.holdService;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:,没有定义com.erac.vos.service.vehicle.hold.HoldService类型的唯一bean :预期的单个匹配bean,但找到2: ActivationHoldService、BaseHoldService

我试过把它改成

代码语言:javascript
复制
@Resource(name="BaseHoldService",type=com.erac.vos.service.vehicle.hold.HoldServiceImpl.class)

包括排除鹌鹑,甚至把baseHoldService换到不同的名字,以及我能想到的任何东西的组合,让它工作,但它仍然找不到它。最奇怪的是,在不同的类中有几乎相同的代码行,工作非常好。

代码语言:javascript
复制
@Resource(name="BaseHoldService",type=com.erac.vos.service.vehicle.hold.HoldServiceImpl.class)
  private HoldService defaultHoldService;

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2014-03-18 18:53:51

这里有关于spring的基本注释,它可以帮助您“轻松”解决问题,但我认为这不是您想要的。

限定符注释应该尽我所能完成这项工作,所以您必须深入挖掘。

DefaultListableBeanFactory中有一个名为determinePrimaryCandidate的方法,它负责在可能的情况下解析重复项,这就是抛出异常的地方。

http://docs.spring.io/spring/docs/3.2.5.RELEASE/javadoc-api/org/springframework/beans/factory/support/DefaultListableBeanFactory.html#determinePrimaryCandidate(java.util.Map,%20org.springframework.beans.factory.config.DependencyDescriptor)

我将在此方法中进行调试,并检查限定符未被正确解析的原因。这可能是一个简单的错误,所以比赛不是按照你的预期完成的,或者是一些不那么琐碎的事情,但这应该是正确的挖掘地点。

票数 2
EN

Stack Overflow用户

发布于 2014-03-20 16:14:56

我最终发现,如果我从注释中删除了包声明,并降低了它工作的第一个字母。我还是不明白为什么这会起作用,以前也不起作用,但现在起作用了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22466239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档