gpt4 book ai didi

java - 如果 @Primary bean 存在,为什么我可以创建另一个 bean?

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:19 25 4
gpt4 key购买 nike

我不明白 @Primary 解决了什么问题。

文档说:

[@Primary] Indicates that a bean should be given preference when multiple candidates are qualified to autowire a single-valued dependency. If exactly one 'primary' bean exists among the candidates, it will be the autowired value.

示例代码:

@Configuration
class Configuration {
@Bean
@Primary
MyType bean1() {
return new MyType(1);
}

@Bean
MyType bean2() {
return new MyType(2);
}
}

示例:

我有 2 个 bean,bean1bean2,它们的类型都是 MyTypebean1 有一个 @Primary 注释,所以当我将类型为 MyType 的对象 Autowiring 到某个构造函数时,bean1 将被选中。

如果始终选择主要 bean,为什么拥有两个相同类型的 bean 是有用的?我何时以及如何使用未被注释为主要的 bean2?该示例显示 bean2 是多余的且未使用。

最佳答案

您仍然可以始终限定您真正想要的 bean,这意味着不会总是选择主要 bean。

@Component
class MyComponent
{
public MyComponent(@Qualifier("bean2") MyType foo) { /*...*/ }
}

@Primary 只是告诉 Spring 如果有两个或多个可能的候选者,优先考虑哪个 bean。你总是可以明确。

此外,另一个构造函数可能采用所有 MyType 的列表。在这种情况下,两个 bean 都将被 Autowiring 。

@Component
class AnotherComponent
{
public AnotherComponent(List<MyType> allFoos) { /*...*/ }
}

关于java - 如果 @Primary bean 存在,为什么我可以创建另一个 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53483556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com