[size=24px][size=13px]比如有個成員變數
@Autowired
private List<String> list1;
然后 有個Spring組件:
@Component
public class MyList extends LinkedList<Number>{},
經過編譯后,泛型擦除,但是
MyList物件依然不能注入List1;
說明Spring 會對成員變數和要注入的物件做泛型檢查,
成員變數的泛型我知道,可以通過Field.getGenericType()獲得,
但是MyList的泛型資訊Spring是如何知道的?
我自己猜測,在掃描MyList組件的時候,將泛型資訊保存到BeanDefinition里,
依賴注入時,對比變數的泛型型別跟物件的泛型資訊,不一致則報錯,但是我找不到BeanDefinition里哪里有保存泛型資訊!
還有一種,利用匿名內部類的方式,獲取物件所屬泛型類的資訊:
Type genericSuperclass = new MyList() {}.getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) genericSuperclass;
Type type = pt.getActualTypeArguments()[0];
但是這有一個問題,匿名內部類是不是只能在源代碼里寫好,程式運行時能動態生成么?
還是有其他方式,到底Spring是怎么判斷左右泛型是否相符?[/size][/size]
uj5u.com熱心網友回復:
沒用過mybatis plus啊 - -轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/258864.html
標籤:Web 開發
