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<Integer> s2; 
// <Integer> qualifier, внедряет integerStore bean

Kotlin

@Autowired
private lateinit var s1: Store<String> 
// <String> qualifier, внедряет stringStore bean

@Autowired
private lateinit var s2: Store<Integer> 
// <Integer> qualifier, внедряет integerStore bean

Общие квалификаторы также применяются при автоматическом соединении списков, экземпляров карты и массивов. Следующий пример автоматически связывает общий List:

Java

// Внедрить все bean Store, если они имеют дженерик <Integer>
// Store<String> bean не будет отображаться в этом списке
@Autowired
private List<Store<Integer>> s;

Kotlin

// Внедрить все bean Store, если они имеют дженерик <Integer>
// Store<String> bean не будет отображаться в этом списке
@Autowired
private lateinit var s: List<Store<Integer>>


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


Комментарии

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

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

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

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