使用泛型作为自动装配限定符
除了 @Qualifier 注解之外,您还可以使用 Java 泛型类型作为限定的一种隐式形式。
例如,假设您有以下配置:
-
Java
@Configuration
public class MyConfiguration {
@Bean
public StringStore stringStore() {
return new StringStore();
}
@Bean
public IntegerStore integerStore() {
return new IntegerStore();
}
}
假设前面的 bean 实现了泛型接口(即 Store<String> 和 Store<Integer>),
您可以 @Autowire Store 接口,并且泛型被用作限定符,如下例所示:
-
Java
@Autowired
private Store<String> s1; // <String> 限定符,注入 stringStore bean
@Autowired
private Store<Integer> s2; // <Integer> 限定符,注入 integerStore bean
当自动装配列表、Map 实例和数组时,泛型限定符也适用。
以下示例自动装配一个泛型 List:
-
Java
// 注入所有 Store bean,只要它们具有 <Integer> 泛型
// Store<String> bean 不会出现在此列表中
@Autowired
private List<Store<Integer>> s;