当使用带有xml配置的spring时,我们可以通过编写相同的相似代码来将多个bean的依赖项引用或添加到一个bean中
<beans>
<bean id ="parent" class="com.Parent">
<property name = "child1" ref = "child1"/>
<property name = "child2" ref = "child2"/>
</bean>
<bean id = "child1" class="com.child">
<property name = "name" value = "abc"/>
</bean>
<bean id = "child2" class="com.child">
<property name = "name" value = "xyz"/>
</bean>
</beans>
现在我有以下代码,我想每个家豆引用2辆车豆 我正在使用限定符来解决歧义,我们可以使用限定符或其他方法引用多个bean吗?
Configfile.java
@Bean("jeep")
public Car returnJeep()
{
Car c = new Car();
c.setName("Wrangler");
return c;
}
@Bean("volvo")
public Car returnVolvo()
{
Car c = new Car();
c.setName("Volvo");
return c;
}
Home.java
@Autowired
@Qualifier("volvo,jeep") --> How can I refer multiple beans here????
private Car car;
@Override
public void print() {
System.out.println("Cheers!!, now you own a new home and a "+ car.getName());
}
一种实现此目的的方法是创建一个更多的car类引用,并使用限定符指定另一个可行的bean名称,还有其他方法可以实现吗?
我们是否可以通过使用@Components来实现相同的目标,即一个bean引用多个bean?
答案 0 :(得分:0)
不可能在同一个属性中添加多个bean限定符。但是,您可以具有相同类型的多个属性。像这样:
@Component
public class Home {
private final Car Volvo;
private final Car jeep;
public Home(@Qualifier("volvo") Car volvo, @Qualifier("jeep") Car jeep) {
this.volvo = volvo;
this.jeep = jeep;
}
// your code goes here
}
另一种实现此目的的方法是使用Map
,如下所示:
@Component
public class Home {
private final Map<String, Car> carMap;
private final Car jeep;
public Home(Map<String, Car> carMap) {
this.carMap = carMap;
}
// your code goes here
}
使用映射方法,key
将是qualifier
名称,而值将是该限定符的实现。