背景
接口
public interface CommissionQuery {
xxx queryCommission(xxx option);
}
实现类
@Service
public class FishCommissionQuery implements CommissionQuery {
......
}
@Service
public class IHomeCommissionQuery implements CommissionQuery {
}
使用
@Resource
private CommissionQuery fishCommissionQuery;
@Resource
private CommissionQuery ihomeCommissionQuery;
public xxx queryCommission(xxx option) {
CommissionQuery commissionQuery;
if (isBizFish(option.getBizCode())) {
commissionQuery = fishCommissionQuery;
} else if (isBizIHome(option.getBizCode())) {
commissionQuery = iHomeCommissionQuery;
}
报错
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type 'com.alibaba.industry.retail.business.core.biz.trade.trade.compute.manager.commission.CommissionQuery' available:
expected single matching bean but found 2: fishCommissionQuery,IHomeCommissionQuery
问题排查
根据经验,怀疑是bean命名的问题。
1、指定bean的名称
service后面加上指定bean的名字
@Service("iHomeCommissionQuery")
@Service("fishCommissionQuery")
指定后,果然ok了。
至此,猜测是bean的默认命名规则导致的翁提。
2、继续排查

继续探究,最终发现罪魁祸首
至此,答案揭晓。
改进做法
1、非正常驼峰式(连续2个首字母大写)的类指定bean的名称
2、尽量避免非正常驼峰式的类名称