当使用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注解表明使用哪个实现来进行注入。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)