Направление нескольких бинов с использованием конфигурации аннотаций - PullRequest
0 голосов
/ 07 апреля 2020

При использовании Spring с конфигурацией xml мы можем ссылаться или добавлять зависимости нескольких 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 и использовать квалификатор указав имя другого компонента, который работает, есть ли другой способ добиться этого?

Можем ли мы достичь того же, используя @Components, то есть один компонент, ссылающийся на несколько компонентов?

1 Ответ

0 голосов
/ 07 апреля 2020

Невозможно добавить несколько квалификаторов бинов к одному и тому же свойству. Однако вы можете иметь несколько свойств одного типа. Примерно так:

@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

...