Как исправить эту ошибку: Не удалось выполнить автоматическое подключение. Существует более одного bean-компонента типа UserBusService

Я учусь на проектах других людей и следую коду. После того, как я закончил писать соответствующий код для определенной главы, произошла следующая ошибка.

Could not autowire. There is more than one bean of 'UserBusService' type.
Beans:
userBusService   (UserBusService.java) 
userBusServiceImpl   (UserBusServiceImpl.java)

Конкретная соответствующая отправка gitHub: Вышеуказанная ошибка произошла после моей последней (четвертой) отправки кода.

Код проекта, который я запустил для изучения, был нормальным. Долго проверял, но проблему не нашел. В некоторой информации предлагалось заменить @Autowired на @Resource или использовать @Qualifier, но это не использовалось в ссылочном коде.

Я хотел бы спросить, что пошло не так. Ждем Вашего ответа

Отвечает ли это на ваш вопрос?

Roman C 18.06.2024 19:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я подозреваю, что ваша @MapperScan аннотация на CommonApp. Согласно документации MyBatis, он создает bean-компонент для каждого интерфейса, который находит в вашем пакете (акцент ниже сделан мной :)

<mybatis:scan/> поддерживает фильтрацию созданных картографов путем указания интерфейса маркера или аннотации. Свойство annotation указывает аннотацию для поиска. Атрибут маркер-интерфейса указывает родительский интерфейс для поиска. Если указаны оба свойства, преобразователи добавляются для интерфейсов, соответствующих любому критерию. По умолчанию эти два свойства имеют значение NULL, поэтому все интерфейсы в заданных базовых пакетах будут загружены как преобразователи.

Я предлагаю вам попробовать заменить @MapperScan("org.example") на @MapperScan("org.example.common.domain.service.user.mapper"), поскольку именно там живет ваш картограф.

Большое спасибо. Это решает вышеуказанную проблему, но когда я вызываю интерфейс входа в систему, серверная часть вылетает с сообщением об ошибке org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): org.example.common.domain.service.user.mapper.UserMapper.fin‌​dUserByName. Не знаю, связано ли это с настройкой

moluzhui 20.06.2024 17:38

Я проверил код, связанный с картографом, и не обнаружил никаких расхождений.

moluzhui 20.06.2024 18:05

Похоже, это должно сработать. У меня есть одно предложение — отказаться от файла сопоставления XML и вместо этого аннотировать метод интерфейса: @Select("select * from sys_user_t where username = #{username}")UserEntity findUserByName(String username);. Другой способ — добавить атрибут parameterType = "String" в XML-элемент вашего сопоставителя, но я не уверен, что это поможет, потому что это должно быть выведено автоматически.

Polly Shaw 21.06.2024 00:33

Если тип имеет два объекта, помещенных в контейнер IOC, появится сообщение об ошибке: Существует более одного bean-компонента. Вы можете использовать аннотацию @ Qualifier, чтобы добавить значение @ Qualifier к классу UserBusService, которое является уникальным идентификатором (id) компонента, введенного в контейнер IOC текущим классом.

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