带有通用通配符的bean的春季注入

时间:2019-10-29 14:00:29

标签: spring spring-boot dependency-injection

我有以下内容:

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


}

但是我在球场上收到一张空地图...

为什么会这样?

1 个答案:

答案 0 :(得分:0)

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

希望这有助于解决问题。