编程语言
首页 > 编程语言> > java-Spring @Primary-如果主要存在,为什么要创建其他bean

java-Spring @Primary-如果主要存在,为什么要创建其他bean

作者:互联网

我不明白@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 bean1和bean2,它们返回类型MyType的对象.其中一个bean1具有注释@Primary,因此当我将MyType类型的对象注入某个构造函数时,将注入bean1创建的对象.

那么,如果要注入主bean,为什么还要有两个相同类型的bean?什么意思什么时候以及如何使用未标注为primary的bean2?示例显示bean2是冗余的且未使用.

解决方法:

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

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

@Primary只是告诉Spring如果一个自动装配字段有两个或更多可能的候选者,则选择哪个bean.

标签:spring-boot,spring-config,spring,java
来源: https://codeday.me/bug/20191024/1924106.html