когда я конфигурирую Spring boot 1.5 с mybatis multi-datasource, классическая ошибка «Параметр 0 конструктора в SimsCardTypeController требовал одного bean-компонента, но было найдено 2: aImpl, A». вот связанные классы:
@RestController
@RequestMapping("/xx")
public class SimsCardTypeController extends RestBase {
private A simsCardTypeService;
private HttpServletRequest request;
@Autowired
public SimsCardTypeController(A simsCardTypeService, HttpServletRequest request) {
this.simsCardTypeService = simsCardTypeService;
this.request = request;
}
..
}
@Component
public class RestBase {}
interface A{}
@Service
class AImpl implements A{}
Я не знаю какой-либо возможной конфигурации, ведущей к тому, что Spring принимает A как bean. Как я могу отладить эту ситуацию?
Я публикую связанные классы и исключения
Реализуют ли 2 класса интерфейс A?
нет, я проверял эту возможность, и исключение упоминает A как bean.
Можете ли вы опубликовать полный проект на github и поделиться ссылкой на d?
это довольно большой продюсерский проект, я не уверен, что смогу разделить связанную и воспроизвести эту проблему. Вы хоть представляете, как может произойти это исключение?
это может произойти, если есть 2 класса, реализующие один и тот же интерфейс, и оба управляются Spring.
что произойдет, если вы замените simsCardTypeService на aImpl?
Это проблема с mybatis scan, mybatis transform A interface to mapper. Я поделюсь советом по устранению подобной проблемы:
1. квалифицируйте странный интерфейс A для bean-компонента, который запрашивает Spring
@Autowired
public SimsCardTypeController(@Qualifier(value = "A")A simsCardTypeService, HttpServletRequest request){}
2. Добавьте точку останова в теле, вы можете увидеть, что такое simsCardTypeService. В моем случае это что-то вроде xxMapper, поэтому я могу связать его со сканированием mybatis.
Благодарность
Можете ли вы опубликовать свой полный код за исключением?