java - Spring Service 名称与接口名称冲突
问题描述
我有一个接口名称
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 类 [ScoreDao] 的注释指定的 bean 名称“ScoreDao”与现有的、不兼容的同名和类 bean 定义冲突 [ScoreDaoImpl]
当我将接口名称更改为 IScoreDao 时,它正在工作。是因为服务名称 @Repository("scoreDao") 与接口名称相同吗?
解决方案
简单的答案是肯定的,这是因为您调用了一个接口ScoreDao
,并且您将其实现为@Repository("scoreDao")
两种解决方法:
重命名
ScoreDao
为其他名称更改
@Repository("scoreDao")
为@Repository
使其使用默认名称
推荐阅读
- javascript - 如何获取嵌套对象的键
- c++ - 用于地图的 glm 重载运算符不起作用
- java - 当脚本作为服务运行时,文件上传在 Jenkins 中不起作用(Selenium/Java)
- css - 文本下用不同颜色的下划线
- sql-server - 快照复制显示错误“步骤定义不正确,因此无法运行”
- c# - 错误 CS1955 不可调用的成员 'Particle Emitter.emit' 不能像方法一样使用
- java - Fitnesse Git 插件 ClassNotFoundException
- php - Paypal 按钮将 url 返回到 WordPress 并显示付款信息
- android - 当我尝试实现 onClickListener 时应用程序崩溃
- javascript - 如何在 jQuery 中获取 AJAX 数据?