使用泛型作为自动装配限定符
除了 @Qualifier 注解外,你还可以使用 Java 泛型作为隐式的限定符形式。例如,假设你有以下配置:
- 
Java 
- 
Kotlin 
@Configuration
public class MyConfiguration {
	@Bean
	public StringStore stringStore() {
		return new StringStore();
	}
	@Bean
	public IntegerStore integerStore() {
		return new IntegerStore();
	}
}@Configuration
class MyConfiguration {
	@Bean
	fun stringStore() = StringStore()
	@Bean
	fun integerStore() = IntegerStore()
}假设上述 Bean 实现了泛型接口(即 Store<String> 和 Store<Integer>),你可以 @Autowire 注入 Store 接口,并且泛型会作为限定符使用,如下例所示:
- 
Java 
- 
Kotlin 
@Autowired
private Store<String> s1; // <String> qualifier, injects the stringStore bean
@Autowired
private Store<Integer> s2; // <Integer> qualifier, injects the integerStore bean@Autowired
private lateinit var s1: Store<String> // <String> qualifier, injects the stringStore bean
@Autowired
private lateinit var s2: Store<Integer> // <Integer> qualifier, injects the integerStore bean泛型限定符在自动装配列表、Map 实例和数组时也适用。以下示例自动装配了一个泛型 List:
- 
Java 
- 
Kotlin 
// Inject all Store beans as long as they have an <Integer> generic
// Store<String> beans will not appear in this list
@Autowired
private List<Store<Integer>> s;// Inject all Store beans as long as they have an <Integer> generic
// Store<String> beans will not appear in this list
@Autowired
private lateinit var s: List<Store<Integer>>