Spring: квалификация разных типов с одним и тем же именем

У меня есть два класса, которые я хочу связать с помощью Spring

@Component
public class Restaurant {
    @Autowired
    @Qualifier("HighClass")
    private CoffeeMaker coffeeMaker;
}

а также:

public class CappuccinoMaker implements CoffeeMaker{
    @Autowired
    @Qualifier("HighClass")
    int numOfSpoons;
}

Затем впрыскивание:

@Bean(name="HighClass")
@Scope("prototype")
public CoffeeMaker HighClassCoffeeMakerGenerator() {
    return new CappuccinoMaker();
}
@Bean(name="HighClass")
public int getNumOfSpoons() {
    return 3;
}

Я хотел бы квалифицировать как int, так и CoffeeMaker с помощью «HighClass». В Guice можно аннотировать разные типы одной и той же аннотацией и правильно их вводить.

Вроде как весной это не разрешено. Когда я пытаюсь ввести поля, я получаю сообщение об ошибке, что требуемый компонент не найден. Я что-то пропустил?


person Shaharg    schedule 12.09.2019    source источник
comment
В Spring имя bean-компонента уникально (см. docs.spring.io/spring/docs/4.0.x/spring-framework-reference/). Вы можете достичь своей цели, используя @Profile docs.spring.io/spring-boot/docs/current/reference/html/.   -  person Michal    schedule 12.09.2019


Ответы (1)


Имя компонента в Spring: уникальный. Используйте @Profile, чтобы выбрать компонент из нескольких конкурирующих вариантов.

person Michal    schedule 12.09.2019