Spring4 个问题- Setter 带有 Spring @Qualifier 注释的方法未被调用

Spring4 issue- Setter methods with Spring @Qualifier annotation not getting invoked

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

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

bean 与这个 class 包在不同的包中。但是我的class里面导入了对应的包。

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

下面是示例代码片段:

我的 class 有 2 个私有属性:

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

对应的setter方法是:

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>

引用下面 spring 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