Spring4发布--Spring @Qualifier注解没有被调用的Setter方法

问题描述:

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

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

这些bean与这个类包中的包是不同的。但是,相应的包会导入到我的课程中。

如果需要额外的Spring-4(version-4.1.6)配置,请多加建议?

下面是示例代码片段:

我有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> 
+0

的'@ Qualifer'什么也不做在这里,因为你不使用自动装配,但明确使用xml进行接线。如果你正在使用自动装配,你还必须使用'@ Autowired'注释该方法,并且你应该删除xml配置,因为这样做没有任何意义。 –

在Spring jira- SPR-9965之下引用,直到Spring-4,没有普遍支持以类型安全的方式注入泛型类型。

问题产生的原因是泛型类型在我们的应用程序遗留代码中没有正确处理。随着Spring-4泛型支持,它变得明显。我已更正我们的应用程序代码。

Futher,文档和参考可以在这里找到:

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