Autowired的一点延伸

Autowired的一点延伸,第1张

Autowired的一点延伸

当使用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注解表明使用哪个实现来进行注入。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5612506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存