同時升級3.2春天遇到下面的問題 - > 4.1注射泛型列表在春季4.1
有一個Metadata
層次,如:AMetadata extends Metadata
, BMetadata extends Metadata
等
有一個Processor
層次,像:
abstract Processor<M extends Metadata>
,
AProcessor extends Processor<AMetadata>
,
BProcessor extends Processor<BMetadata>
等
有包含處理器的注入List
一個服務,例如:
@Inject private List<Processor<Metadata>> processors;
雖然這完美地工作在Spring 3.2,與Spring 4.1.0(和4.0以及)它無法注入列表成員。進入調試階段,發現: Processor<Metadata>.isAssignableFrom(BProcessor) == false
,這導致處理器bean不匹配作爲注入的合格候選者。
一個可能的黑客攻擊,尋找解決辦法如下聲明處理器:
BProcessor<Metadata> extends Processor<BMetadata>
- 這樣的作品,但看起來有點怪異。另一種選擇是使用List<Processor<? extends Metadata>>
,但這需要在其他地方修改一些代碼以便編譯,並在依賴泛型的類中導致大量的類型安全檢查警告。
所以問題是,如何正確處理這種情況?有沒有人遇到類似的東西?