春天的歧义

问题描述 投票:0回答:1

我很困惑为什么我们要使用 @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 来实现其他的吗?如果可能的话,你会怎么做?我一直在文档中搜索更多信息,但找不到任何可以回答问题的内容。

我仍然不明白,如果我们永远不会从应用程序上下文中获取并使用它们,为什么我们会有不同的接口实现。为什么还要麻烦?

spring spring-boot annotations qualifiers
1个回答
0
投票

让我尝试用简单的例子来回答这个问题。

关于@Primary注释用例:

  • 考虑一下这样的场景:在 lib 中有一个 Bean 定义,这是非常通用的。现在在您的模块中,您引用该库并获得了默认 bean,但您还定义了一个特定的实现,因此您希望将您的实现定义为 Primary。

关于@Qualifier注释用例:

  • 正如您正确指出的那样,拥有一种类型的多个 bean,例如“车辆”,但具有特定的实现,如汽车、公共汽车等。您可以轻松地使用限定符名称进行隔离。
© www.soinside.com 2019 - 2024. All rights reserved.