接口有多个实现类,spring如何自动注入想
这种场景下,只能通过 byName 注入的方式。可以使用 @Resource 或 @Qualifier 注解。@Resource 默认是按照 byName 的方式注入的, 如果通过 byName 的方式匹配不到,再按 byType 的方式去匹配。
例如接口IAnimal有两个实现类 DaoImpl 和 CatImpl。
@Service("dogImpl")
public class DaoImpl impliments IAnimal{
...
}
@Service("catImpl")
public class CatImpl impliments IAnimal{
...
}
public class AnimalController {
@Resource(name="dogImpl") //实现类1中 @Service注解中标定的名称
private IAnimal dogImpl;
......
}或者
@Qualifier 注解也是 byName的方式,但是与@Resource 有区别,@Qualifier 使用的是 类名
public class AnimalController {
@Qualifier("DaoImpl") //实现类1的类名。注意区分与Resource(name="dogImpl") 的区别。
private IAnimal dogImpl;
......
}