我们在项目中经常会遇见这样一个问题,如一个接口它有两个或以上的实现类,那么spring会注入哪一个呢?
其实遇到这种情况需要做特殊标识的,不然spring会报错误提示!
问题如下:
两个实现类共同继承了DataDao
//给实现类起个别名 imgDataDao
@Service(value="imgDataDao")
public class ImageDataDao extends DataDao{
}
//给实现类起个别名 textDataDao
@Service(value="textDataDao")
public class TextDataDao extends DataDao{
}
解决方法:
1.使用@Resource注解
//指定实现类名称 imgDataDao
@Resource(name="imgDataDao")
private DataDao xx;
//指定实现类名称 textDataDao
@Resource(name="textDataDao")
private DataDao xx;
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。
2. 使用@Qualifier注解
@Autowired
@Qualifier("imgDataDao")
private DataDao yy;
@Autowired
@Qualifier("textDataDao")
private DataDao yy;