使用泛型作为自动装配限定符

除了 @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;