2014-09-29 60 views
0

同時升級3.2春天遇到下面的問題 - > 4.1注射泛型列表在春季4.1

有一個Metadata層次,如:AMetadata extends MetadataBMetadata 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>>,但這需要在其他地方修改一些代碼以便編譯,並在依賴泛型的類中導致大量的類型安全檢查警告。

所以問題是,如何正確處理這種情況?有沒有人遇到類似的東西?

回答