当使用Autowired进行依赖注入的时候,采用的是类型注入。
我们往往采用接口解耦的方式实现,例如定义DataService接口
public interface DataService{
}
然后在使用的时候,使用接口定义成员变量
@Service
public class BusinessServiceImpl inplements BusinessService{
@Autowired
private DataService dataService;
}
这时候就会存在几种情况:
1. DataService有唯一的实现类,自动注入是成功的。
2. DataService没有实现类,注入失败。
3. DataService有多个实现,不知道注入哪个,注入失败。
解决多实现的问题1. 在某个实现上,使用@Primary注解指定优先注入的实现类型。
interface SortingAlgorithm {
}
@Component
public class MergeSort implements SortingAlgorithm {
// Class code here
}
@Component
@Primary
class QuickSort implements SortingAlgorithm {
// Class code here
}
默认会把QuickSort注入。
2. 使用@Qualifier注解指定具体的实现。(按名称)
@Component
@Qualifier("mergesort")
public class MergeSort implements SortingAlgorithm {
// Class code here
}
@Component
public class QuickSort implements SortingAlgorithm {
// Class code here
}
@Component
public class SomeService {
@Autowired
@Qualifier("mergesort")
SortingAlgorithm algorithm;
}
@Qualifier注解表明使用哪个实现来进行注入。



