使用注释配置引用多个bean

问题描述 投票:0回答:1

当使用带有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());
    }

实现此目标的一种方法是创建一个更多的class汽车引用,并使用限定符指定另一个可行的bean名称,还有其他实现此目标的方法吗?

我们是否可以通过使用@Components来实现相同的功能,即一个bean引用多个bean?

[当使用带有xml配置的spring时,我们可以通过编写相同的相似代码来将多个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名称,而值将是该限定符的实现。

A working sample can be found on this GitHub repo

java spring annotations spring-annotations spring-bean
1个回答
0
投票
实现此目的的另一种方法是使用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名称,而值将是该限定符的实现。
© www.soinside.com 2019 - 2024. All rights reserved.