首页 > 解决方案 > 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") 与接口名称相同吗?

标签: javaspringspring-annotations

解决方案


简单的答案是肯定的,这是因为您调用了一个接口ScoreDao,并且您将其实现为@Repository("scoreDao")

两种解决方法:

  1. 重命名ScoreDao为其他名称

  2. 更改@Repository("scoreDao")@Repository使其使用默认名称


推荐阅读