[英]NoUniqueBeanDefinitionException when injecting JpaRepository to Generic class
[英]Spring Autowired, injecting generic fields in to generic classes, NoUniqueBeanDefinitionException
如果在類型信息上有兩個實例不同,則鍵入將通用接口的類型化的組件注入到通用類中的操作將失敗。
@Autowired
BetterObjectPrinter<Integer> integerBetterObjectPrinter;
@Autowired
BetterObjectPrinter<String> stringBetterObjectPrinter;
public interface ObjectPrinter<T> {
public String print(T obj);
}
@Component
public class IntegerPrinter implements ObjectPrinter<Integer> {
public String print(Integer obj) {
return obj.toString();
}
}
@Component
public class StringPrinter implements ObjectPrinter<String> {
public String print(String obj) {
return obj.toString();
}
}
@Component
public class BetterObjectPrinter<T> {
@Autowired
ObjectPrinter<T> objectPrinter;
public String print(T obj) {
return objectPrinter.print(obj);
}
}
我想知道這是否是預期的結果,是否有足夠的類型信息可用?
我得到的結果是
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.ObjectPrinter<?>' available: expected single matching bean but found 2: integerPrinter,stringPrinter
但是,如果ObjectPrinter
是通用類,它確實可以工作,因此類型信息必須仍然可用
@Component
public class ObjectPrinter<T> {
public String print(T obj) {
return obj.toString();
}
}
如果使用@Configuration
和@Bean
批注創建2個bean來創建@Bean
的2個實例, BetterObjectPrinter
以上內容是使用Spring 4.3.13測試的。
是的,可以預料的是,spring不知道要自動連線到objectPrinter字段中的哪兩個。 您可以使用@Qualifier批注解決沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.