Сообщения

Показаны сообщения с ярлыком "@Qualifier"

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 J...

Spring IoC контейнер: конфигурация на основе аннотаций, использование CustomAutowireConfigurer

Изображение
CustomAutowireConfigurer - это BeanFactoryPostProcessor, который позволяет регистрировать собственные типы аннотаций квалификаторов, даже если они не аннотированы аннотацией Spring @Qualifier. В следующем примере показано, как использовать CustomAutowireConfigurer: <bean id="customAutowireConfigurer" class="org.springframework.beans.factory.annotation.CustomAutowireConfigurer"> <property name="customQualifierTypes"> <set> <value>example.CustomQualifier</value> </set> </property> </bean> AutowireCandidateResolver определяет кандидатов для автоматической привязки по: Значение autowire-candidate каждого определения бина Любые шаблоны default-autowire-candidates, доступные в элементе <beans/> Наличие аннотаций @Qualifier и любых пользовательских аннотаций, зарегистрированных в CustomAutowireConfigurer Когда несколько bean-компонентов квалифицируются к...

Spring IoC контейнер: конфигурация на основе аннотаций, использование дженериков в качестве квалификаторов автопривязки

Изображение
В дополнение к аннотации @Qualifier вы можете использовать универсальные типы Java (дженерики) в качестве неявной формы квалификации. Например, предположим, что у вас есть следующая конфигурация: Java @Configuration public class MyConfiguration { @Bean public StringStore stringStore() { return new StringStore(); } @Bean public IntegerStore integerStore() { return new IntegerStore(); } } Kotlin @Configuration class MyConfiguration { @Bean fun stringStore() = StringStore() @Bean fun integerStore() = IntegerStore() } Предполагая, что предыдущие компоненты реализуют универсальный интерфейс (то есть Store<String> и Store<Integer>), вы можете привязать с помощью @Autowire интерфейс Store, и дженерик используется в качестве квалификатора, как показано в следующем примере: Java @Autowired private Store<String> s1; // <String> qualifier, внедряет stringStore bean @Autowired private Store...

Spring IoC контейнер: конфигурация на основе аннотаций, настройка автопривязки на основе аннотаций с @Qualifier

Изображение
@Primary - эффективный способ использовать автоматическую привязку по типу с несколькими случаями, когда можно определить одного основного кандидата. Когда вам нужно больше контроля над процессом выбора, вы можете использовать аннотацию Spring @Qualifier . Вы можете связать значения квалификатора с конкретными аргументами, сузив набор совпадений типов, чтобы для каждого аргумента был выбран конкретный компонент. В простейшем случае это может быть просто описательное значение, как показано в следующем примере: Java public class MovieRecommender { @Autowired @Qualifier("main") private MovieCatalog movieCatalog; // ... } Kotlin class MovieRecommender { @Autowired @Qualifier("main") private lateinit var movieCatalog: MovieCatalog // ... } Вы также можете указать аннотацию @Qualifier для отдельных аргументов конструктора или параметров метода, как показано в следующем примере: Java public class MovieRecommender { ...