Spring4问题 - 没有调用Spring @Qualifier注释的Setter方法

时间:2016-08-25 06:32:07

标签: spring java-8 spring-4

我已将我的项目从spring-3.1.2和java-6迁移到Spring-4.1.6和java-8。在此迁移之后,不会调用具有Spring @Qualifier注释的Setter方法,从而导致给定变量的空值。

请注意,没有抛出弹出异常。只是Spring-4不会使用@Qualifier注释调用setter方法。

bean与此类包位于不同的包中。但是,相应的包将在我的类中导入。

如果需要额外的Spring-4(版本4.1.6)配置,请提供建议吗?

以下是示例代码段:

我的班级有2个私人属性:

private ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> syntheticAwareProvider;
private ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> sfmSyntheticAwareProvider;

相应的setters方法是:

public void setSyntheticAwareProvider(
        @Qualifier("extractionContextBasedSyntheticAssetIdentitiesProvider") ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> syntheticAwareProvider) {
    this.syntheticAwareProvider = syntheticAwareProvider;
}

public void setSfmSyntheticAwareProvider(
        @Qualifier("extractionContextBasedSfmSyntheticAssetIdentitiesProvider") ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> sfmSyntheticAwareProvider) {
    this.sfmSyntheticAwareProvider = sfmSyntheticAwareProvider;
}

对应的beans.xml是:

<bean id="extractionContextBasedSfmSyntheticAssetIdentitiesProvider"
    class="com.package.ExtractionContextBasedSfmSyntheticAwareAssetIdentitiesProviderImpl">
    <property name="sfmSyntheticAwareAssetPidDAO" ref="sfmSyntheticAwareAssetPidDAO" />
</bean>

<bean id="extractionContextBasedSyntheticAssetIdentitiesProvider"
    class="com.package.ExtractionContextBasedSyntheticAwareAssetIdentitiesProviderImpl">
    <property name="syntheticAwareAssetPidDAO" ref="syntheticAwareAssetPidDAO" />
</bean>

1 个答案:

答案 0 :(得分:0)

引用春季jira-SPR-9965,直到Spring-4,对于以类型安全的方式注入泛型类型没有一般支持。

问题的结果是因为我们的应用程序遗留代码中没有正确处理泛型类型。随着spring-4泛型支持,它变得显而易见。我更正了我们的应用程序代码。

此外,文档和参考资料可在以下网址找到:

https://jira.spring.io/browse/SPR-9965

https://www.jayway.com/2013/11/03/spring-and-autowiring-of-generic-types/

https://spring.io/blog/2013/12/03/spring-framework-4-0-and-java-generics