使用注释配置引用多个bean



当使用带有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>

现在我有了下面的代码,我想引用每个家庭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());
}

实现这一点的一种方法是再创建一个类car的引用,并使用限定符指定另一个有效的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
}

使用映射方法,key将是qualifier名称,值将是该限定符的实现。

可以在这个GitHub repo 上找到一个工作样本

最新更新