让我们假设您具有以下类来扩展Processor接口:
Interface Processor {}
class ProcesorImpl1 implements Processor {}
class ProcesorImpl2 implements Processor {}
现在,让我们假设您在package1的配置类中定义了以下bean:
class ConfigurationClass1 {
@Bean
@Qualifier("processor")
public Processor processor() {
return new ProcesorImpl1();
}
}
接下来,您在package2的配置类中定义以下bean:
class ConfigurationClass2 {
@Bean
@Qualifier("processor")
public Processor anotherProcessor() {
return new ProcesorImpl2();
}
}
问题是Spring如何解决以下注入:
@Inject @Qualifier("processor") proc;
如果其中一个Bean用@Primary注释怎么办?
答案 0 :(得分:1)
Qualifier
不能与@Bean
批注一起使用,但是@Primary
可以,并且它将定义如果您按类型注入一个bean并且有多个bean,则将注入什么具体bean。这种类型由Spring管理。如果要注入另一个非主bean,可以用@Qualifier("beanName")
批注对其进行标记,以按名称注入它。
如果您定义2个具有相同名称和相同类型的bean
class ConfigurationClass1 {
@Bean("processor")
public Processor processor() {
return new ProcesorImpl1();
}
}
class ConfigurationClass2 {
@Bean("processor")
public Processor anotherProcessor() {
return new ProcesorImpl2();
}
}
由于默认情况下allowBeanDefinitionOverriding
属性设置为true
,因此Spring将在第二个中覆盖第一个已加载的bean,并且只有一个将保留在容器中。