[英]Refering multiple beans using annotation configuration
当使用 spring 和 xml 配置时,我们可以通过编写相同的类似代码来引用或添加多个 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>
现在我有下面的代码我想为每个家庭 bean 引用 2 个汽车 bean 我正在使用限定符来解决歧义,我们可以使用限定符或其他东西来引用多个 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());
}
实现这一点的一种方法是再创建一个 class 汽车的引用,并使用限定符指定另一个有效的 bean 名称,还有其他方法可以实现吗?
我们可以通过使用@Components 来实现相同的目的,即一个bean 引用多个bean?
不可能将多个 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
}
使用 map 方法, key
将是qualifier
名称,值将是该限定符的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.