接口:
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;
}
就足够了,你可以使用多态性的魔力