使用注释配置引用多个bean

时间:2020-04-07 13:22:25

标签: java spring annotations spring-annotations spring-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>

现在我有以下代码,我想每个家豆引用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?

1 个答案:

答案 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名称,而值将是该限定符的实现。

A working sample can be found on this GitHub repo