【问题标题】:Spring4 issue- Setter methods with Spring @Qualifier annotation not getting invokedSpring4问题-没有调用带有Spring @Qualifier注释的Setter方法
【发布时间】:2016-08-25 18:14:01
【问题描述】:

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

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

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

如果需要额外的 Spring-4(version-4.1.6) 配置,请告知?

下面是示例代码-sn-p:

我的班级有 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>

【问题讨论】:

  • @Qualifer 在这里什么都不做,因为您没有使用自动装配,而是使用 xml 显式装配。如果您使用自动装配,您还必须使用 @Autowired 注释该方法,并且您应该删除 xml 配置,因为这没有任何意义。

标签: spring java-8 spring-4


【解决方案1】:

在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2014-06-09
    • 2018-05-06
    • 2017-05-04
    • 1970-01-01
    相关资源
    最近更新 更多