我很困惑为什么我们要使用 @Qualifier 和 @Primary 注释。如果我们必须指定要使用哪个实现,然后它就成为我们实例化的 bean,那么为什么要有多个接口实现呢?可能只是我的理解有误
public interface Computer {
// ... some code here
}
@Component
@Primary
public Laptop implements Computer {
// ... some code here
}
@Component
public Desktop implements Computer {
// ... some code here
}
一些 RestController
private final Computer pc;
@GetMapping("/")
public String someMethod() {
return pc.name();
}
所以我知道它将返回一个 Laptop 对象,这就是我告诉 Spring Primary 实现的内容。但是其他接口有什么用呢?我认为更好的问题是,我可以使用 DI/IoC 来实现其他的吗?如果可能的话,你会怎么做?我一直在文档中搜索更多信息,但找不到任何可以回答问题的内容。
我仍然不明白,如果我们永远不会从应用程序上下文中获取并使用它们,为什么我们会有不同的接口实现。为什么还要麻烦?
让我尝试用简单的例子来回答这个问题。
关于@Primary注释用例:
关于@Qualifier注释用例: