@Anrek
Есть файл Kotlin, в котором объявляется много разных аннотаций в список (первые две для примера):
import javax.inject.Qualifier
@Qualifier
annotation class WithErrorHandler
@Qualifier
annotation class UseCaseScope
..
Что я прочитал про аннотацию: «Аннотация @Qualifier позволяет уточнить имя бина, который надо внедрить. Используется прямо перед аргументом».
Но ведь после аннотации нет скобок, в которых бы что-то уточнялось, например так:@Qualifier("appContext1")
Вопрос: зачем здесь может быть нужна аннотация @Qualifier, если после нее ничего нет? Что я понимаю не так?
Решения вопроса 1
@Anrek
В реальной жизни может сложится ситуация, когда создаётся несколько бинов одного и того же типа (например, с 1 и тем же интерфейсом), но в конкретном случае например необходим конкретный бин. @Qualifier — аннотация позволяет уточнить какой именно.
1) Есть @Qualifier, которая импортируется из пакета CDI JSR 330 (CDI-это стандарт Java для контекстов и внедрения зависимостей, а JSR-330-это его подмножество, которое он полностью поддерживает), импортируется так:import javax.inject.Qualifier
Ее уточнение не добавляется, просто пишется так:@Qualifier
2) Есть @Qualifier, которая импортируется из пакета фреймворка Spring (фреймворк для внедрения зависимостей), импортируется так:
import org.springframework.beans.factory.annotation.Qualifier
И ей как раз указывается «уточнение» в скобках: @Qualifier("appContext1")
В Spring бин называется по имени и вызывается явно по нему.
В случае JSR 330 для этого создается своя аннотация для разделения зависимостей с одинаковыми интерфейсами и затем применяется и к классу бина и к зависимости. Документ про который шла речь в вопросе как раз перечень таких аннотаций.
Итого: в Spring — определяемся с необходимым бином по его имени, а в JSR 330 — по имени его аннотации и удобно перечень всех этих аннотаций собрать в отдельный файл (что и сделали).
Источник (тут же можно и примеры посмотреть)
Комментировать
Ответы на вопрос 1
@Jacen11
Что я понимаю не так?
видимо все
ты указываешь что annotation class UseCaseScope будет уточнять какой бин. Ставишь его где создается бин и где вставлять. Обычно создается и инжектится один объект одного типа и тогда и так понятно куда вставлять. А это когда много бинов одинакового типа.
Но ведь после аннотации нет скобок, в которых бы что-то уточнялось, например так:
@Qualifier(«appContext1»)
что это должно значить и что собрался уточнять я не понял