Spring IoC контейнер: сканирование classpath, предоставление метаданных квалификатора с аннотациями

Аннотация @Qualifier обсуждалась в посте "Настройка автопривязки на основе аннотаций с @Qualifier". Примеры в том посте демонстрируют использование аннотации @Qualifier и пользовательских аннотаций квалификатора для обеспечения детального контроля при разрешении кандидатов с автопривязкой. Поскольку те примеры были основаны на определениях bean-компонентов XML, метаданные квалификатора были предоставлены в определениях bean-кандидатов с использованием квалификатора или мета-дочерних элементов элемента bean-компонента в XML. Полагаясь на сканирование пути к классам для автоматического обнаружения компонентов, вы можете предоставить метаданные квалификатора с аннотациями на уровне типа для класса-кандидата. Следующие три примера демонстрируют эту технику:

Java

@Component
@Qualifier("Action")
public class ActionMovieCatalog implements MovieCatalog {
    // ...
}

Kotlin

@Component
@Qualifier("Action")
class ActionMovieCatalog : MovieCatalog

Java

@Component
@Genre("Action")
public class ActionMovieCatalog implements MovieCatalog {
    // ...
}

Kotlin

@Component
@Genre("Action")
class ActionMovieCatalog : MovieCatalog {
    // ...
}

Java

@Component
@Offline
public class CachingMovieCatalog implements MovieCatalog {
    // ...
}

Kotlin

@Component
@Offline
class CachingMovieCatalog : MovieCatalog {
    // ...
}

Как и в случае большинства альтернатив на основе аннотаций, имейте в виду, что метаданные аннотации привязаны к самому определению класса, в то время как использование XML позволяет нескольким бинам одного типа предоставлять вариации в своих метаданных квалификатора, поскольку эти метаданные предоставляются на экземпляр, а не на класс.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки