У меня есть 2 интерфейса A и B, которые расширяют другой интерфейс C. Однако, когда я использую @Qualifier("aImpl"), я получаю неудовлетворительную зависимость от spring
Интерфейсы
public interface EsResourceLoader { ... }
public interface CommonEsDao extends EsResourceLoader { ... }
public interface CommonModifiedEsDao extends EsResourceLoader { ... }
Первая реализация
@Service
public class LBModifiedEsDao implements CommonModifiedEsDao { ... }
Вторая реализация
@Service
public class LBDao implements CommonEsDao {
private CommonModifiedEsDao myDao;
@Autowired
public LBDao(@Qualifier("lBModifiedEsDao") CommonModifiedEsDao myDao) { ...
}
}
Контроллер выдает исключение
@RestController
@RequestMapping{...}
public class IndexAdminController {
private CommonEsDao esDao;
@Autowired
public IndexAdminController(@Qualifier("lBDao")CommonEsDao esDao){ ... }
}
А вот Исключение
Exception encountered during context initialization - cancelling refresh
attempt: org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'indexAdminController': Unsatisfied dependency
expressed through field 'lbDao';
дело не в поле, я думаю, дело в разрешении имен, может быть, вы можете поставить @Service ("lbDao"), а затем попробовать еще раз




Поместите свою аннотацию @Qualifier в службу, и она должна работать.
@Service
@Qualifier("lBModifiedEsDao")
public class LBModifiedEsDao
implements CommonModifiedEsDao { ... }
А также для второго обслуживания
@Service
@Qualifier("lBDao")
public class LBDao implements CommonEsDao {
private CommonModifiedEsDao myDao;
@Autowired
public LBDao(@Qualifier("lBModifiedEsDao") CommonModifiedEsDao myDao) { ...
}
}
Теперь Spring должен иметь возможность всегда правильно автоматически подключать его. Кроме того, это также хорошо, потому что вы можете быть уверены, что у вас всегда будет правильная реализация.
Обновлено: Как и в вашем коде с аннотацией @Qualifier, можно использовать имя в аннотациях компонентов, т.е.: @Component("myComponent")
В вашем
indexAdminControllerнет поляlbDao. Вы уверены, что код соответствует исключению? Может быть, ваш контроллер более старой версии?