Spring注入了一个带有泛型问题的列表



接口:

public interface PoiSearchDataProvider<T extends AbstractPoiSearchData> {
T fetch(PoiSearchRequest poiSearchRequest) throws Exception;
}

如果我使用:

@Resource
private List<PoiSearchDataProvider<AbstractPoiSearchData>> poiSearchDataProviders;

应用程序无法启动:expected at least 1 bean which qualifies as autowire candidate.

它起作用:

@Resource
private List<PoiSearchDataProvider<? extends AbstractPoiSearchData>> poiSearchDataProviders;

我想知道背后的原因。。。

因为您的接口被定义为T extends AbstractPoiSearchData,然后List<PoiSearchDataProvider<AbstractPoiSearchData>>,它被声明为单个AbstractPoiSearchData,它不扩展自己。

我认为在你的情况下:

public interface PoiSearchDataProvider<AbstractPoiSearchData> {
AbstractPoiSearchData fetch(PoiSearchRequest poiSearchRequest) throws Exception;
}

就足够了,你可以使用多态性的魔力

最新更新