將泛型用作自動裝配限定符

除了 @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>>
© . This site is unofficial and not affiliated with VMware.