带有通用通配符的bean的Spring注入



我有以下内容:

public abstract class ReportGenerationStrategy<T extends ReportParameter> {
public abstract void generate(T reportParameter) throws IOException;
}

子类:

@Component
@AllArgsConstructor
public class DeferredRevenueReportGenerationStrategy extends ReportGenerationStrategy<DeferredRevenueReportParameter> {

}
@Component
@AllArgsConstructor
public class OffBalanceExposureReportGenerationStrategy  extends ReportGenerationStrategy<OffBalanceExposureReportParameter> {

}

我正在创建一个包含子类的地图:

@Bean
public Map<ReportType, ReportGenerationStrategy<? extends ReportParameter>> generationStrategies(
@Qualifier("deferredRevenueReportGenerationStrategy") final ReportGenerationStrategy<? extends ReportParameter> deferredRevenue,
@Qualifier("offBalanceExposureReportGenerationStrategy") final ReportGenerationStrategy<? extends ReportParameter> offBalanceExposure
)
{
return ImmutableMap.of(
ReportType.DEFERRED_REVENUE, deferredRevenue,
ReportType.OFF_BALANCE_EXPOSURE, offBalanceExposure
);
}

并尝试注入如下地图:

@AllArgsConstructor
@Slf4j
public class ReportApplicationServices {

private final Map<ReportType, ReportGenerationStrategy<ReportParameter>> generationStrategies; //Empty map injected

}

但我在球场上收到了一张空地图。。。

为什么会发生这种情况?

我相信您错过了在声明的private final Map上使用@Autowire注释。

希望这能帮助解决问题。

最新更新