Id,想问一问Qualifier注释在Bean方法上到底在做什么?我认为这与在Bean批注中指定名称相同,但是用例证明了其他情况:
配置:
@Bean
@Qualifier("myGroup")
public MyObject myObject1() {
return new MyObject("myObject1");
}
@Bean
@Qualifier("myGroup")
public MyObject myObject2() {
return new MyObject("myObject2");
}
@Bean
public MyObject myObject3() {
return new MyObject("myObject3");
}
注射:
@Autowired
@Qualifier("myGroup")
private List<MyObject> myObjects;
列表myObjects将仅包含具有限定符的myObject1和myObject2。 Bean名称将由方法命名。 所以我的问题是,为什么,以及如何运作?
答案 0 :(得分:1)
这有效,因为您正在自动装配MyObject
的列表。将同一个类的多个bean自动装配到包含该类的列表中不是问题。我的意思是,这是不同的实例,是的,但是如果您自动装配它们的列表,那么您应该知道为什么这样做。
如果您这样做,将无法正常工作
@Autowired
@Qualifier("myGroup")
private MyObject myObjects;
因为myObject1
和myObject2
都将被视为自动装配候选者,这将使Spring失效。而且由于您在自动装配时放置了@Qualifier
,所以它只会自动装配符合@Qualifier