SSM项目中,我将复用性较高的方法封装了一个BaseMapper接口,其他所有Mapper接口继承于它,于是引发了一个问题
错误代码太多,只贴出来主要的一行:
expected single matching bean but found 2: busiCarMapper,sysUserMapper
翻译结果为:期望单匹配bean,但发现2:busiCarMapper,sysUserMapper
busiCarMapper,sysUserMapper是继承BaseMapper的两个子接口,
排查问题时方向搞错了,一直在检查serviceimpl层和配置文件,最终发现原来是BaseServiceImpl的问题
public class BaseServiceImpl<F, V> implements IBaseService<F, V> {
@Autowired
BaseMapper<F, V> baseMapper;
public BaseServiceImpl(BaseMapper<F, V> baseMapper) {
this.baseMapper = baseMapper;
}
}
把此处的@Autowired注解去掉就好了,此处的baseMapper对象是通过子类调用父类构造方法传入的,完全不需要@Autowired。有多个子类时,@Autowired会引起上述bug,因为它在注入时不知道调用哪个子类
希望能对人有帮助。