我有一个接口名称
public interface ScoreDao {
public int storeScore(OverallScore overallScore);
public void storeIndividualScore(ScoreTO scoreTO);
}
实现类如下所示
@Repository("scoreDao")
public class ScoreDaoImpl implements ScoreDao {
@Override
public int storeScore(OverallScore overallScore) {
//Implementation
}
@Override
public void storeIndividualScore(ScoreTO scoreTO){
//Implementation
}
}
来电者正在使用以下服务
@Service("scoreService")
public class scoreServiceImpl implements IScoreService {
@Autowired
private ScoreDao scoreDao;
@Override
public int storeScore(OverallScore overallScore) {
return scoreDao.storeOverallScore(overallScore);
}
@Override
public void storeIndividualScore(ScoreTO scoreTO) {
scoreDao.storeIndividualScore(scoreTO);
}
}
我正在使用spring 4.x,而部署我遇到了bean冲突错误,如下所示。
引起:java.lang.RuntimeException: org.springframework.context.annotation.ConflictingBeanDefinitionException: bean类的注释指定bean名称'ScoreDao'[ScoreDao] 与现有的,不兼容的同名bean定义冲突 和班级[ScoreDaoImpl]
当我将界面名称更改为IScoreDao时,它正在运行。是否因为服务名称@Repository(“scoreDao”)与接口名称相同?
答案 0 :(得分:4)
简单的答案是是,这是因为您有一个名为-----END CERTIFICATE-----
的界面,并且您将其实现为\r\n\
解决它的两种方法:
将ScoreDao
重命名为其他名称
将@Repository("scoreDao")
更改为ScoreDao
,以便它将使用默认名称
答案 1 :(得分:0)
在您的界面上有另一个解决方案提及@Repository,因此您无需在实现类中提及,因为您实现了该接口。所以它使用接口名称自动创建bean。