Ожидает ли Spring @Qualifier идентификатор компонента в качестве значения элемента?Идентификатор bean-компонента Spring @ Qualifier за кадром? - PullRequest
0 голосов
/ 23 апреля 2019

Я какое-то время играл с @Qualifier и его идеями, целенаправленно ломая логику соединений, идентификаторы компонентов, потенциальные компоненты, дублирующие квалификаторы и т. Д.

Я хотел бы знать: действительно ли @Qualifier является идентификатором идентификатора компонента? или это что-то вроде Alias ​​ для бина, кроме идентификатора бина по умолчанию? Документация из @Qualifier на самом деле ничего не говорит об этом или о чем-либо еще относительно отношения его элемента / атрибута к идентификатору компонента .. но:

Есть поведение, которое мне кажется довольно интересным:

Если у меня есть несколько @Component классов, реализующих один interface A {..}, и:

  1. Если я предоставлю один из этих компонентов с пользовательским идентификатором, например @Component("myId"), и если я попытаюсь внедрить этот компонент в другое место с @Autowired @Qualifier("myId") - все будет работать нормально - это означает, что этот конкретный компонент квалифицирован различается и идентифицируется по его идентификатору;
    (я предполагаю, что элемент @Component ("myId") является идентификатором компонента, хотя официальная документация @ Component's Необязательный Сводка элементов довольно однозначно для моего понимания)
  2. Если я, с другой стороны, предоставлю тот же компонент с @Component @Qualifier("myId"), а остальная часть сценария будет такой же - все все равно будет работать отлично.

Однако! , интересная часть, которую я наблюдал, состоит в том, что @Component("X") устанавливает идентификатор соответствующего бина на X, тогда как @Qualifier("Y") не устанавливает идентификатор соответствующего бина на X.

Если @Qualifier является чем-то вроде псевдонима, что, если поле, которое должно быть введено, имеет @Qualifier("name") для узких критериев, но доступны два bean-компонента, один с идентификатором name и другой с Qualifier name, который будет быть введенным?

Кто-нибудь мог бы пролить свет на то, как все это работает?

...