我已经尽力修复了这个错误,但是spring似乎无法区分基本holdService和它的子activationHoldService。
@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
我试过把它改成
@Resource(name="BaseHoldService",type=com.erac.vos.service.vehicle.hold.HoldServiceImpl.class)包括排除鹌鹑,甚至把baseHoldService换到不同的名字,以及我能想到的任何东西的组合,让它工作,但它仍然找不到它。最奇怪的是,在不同的类中有几乎相同的代码行,工作非常好。
@Resource(name="BaseHoldService",type=com.erac.vos.service.vehicle.hold.HoldServiceImpl.class)
private HoldService defaultHoldService;有什么想法吗?
发布于 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)
我将在此方法中进行调试,并检查限定符未被正确解析的原因。这可能是一个简单的错误,所以比赛不是按照你的预期完成的,或者是一些不那么琐碎的事情,但这应该是正确的挖掘地点。
发布于 2014-03-20 16:14:56
我最终发现,如果我从注释中删除了包声明,并降低了它工作的第一个字母。我还是不明白为什么这会起作用,以前也不起作用,但现在起作用了
https://stackoverflow.com/questions/22466239
复制相似问题