Имя службы Spring конфликтует с именем интерфейса

У меня есть имя интерфейса

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, при развертывании я получаю ошибку конфликта компонентов, как показано ниже.

Причина: java.lang.RuntimeException: org.springframework.context.annotation.ConflictingBeanDefinitionException: указанное в аннотации имя компонента 'ScoreDao' для класса компонента [ScoreDao] конфликтует с существующим, несовместимым определением компонента с тем же именем и классом [ScoreDaoImpl]

Когда я меняю имя интерфейса на IScoreDao, оно работает. Это из-за того, что имя службы @Repository("scoreDao") совпадает с именем интерфейса?

2 ответа

Решение

Ответ прост: да, это связано с тем, что у вас есть интерфейс ScoreDao и вы делаете реализацию этого как @Repository("scoreDao")

два способа решить это:

  1. переименовывать ScoreDao на другое имя

  2. + Изменить @Repository("scoreDao") в @Repository так что он будет использовать имя по умолчанию

Есть еще одно решение упоминания @Repository в вашем интерфейсе, так что вам не нужно упоминать о своем классе реализации, потому что вы реализуете этот интерфейс. поэтому он создает бин автоматически с именем интерфейса.

Другие вопросы по тегам