我已经将我的项目从spring-3.1.2和java-6迁移到Spring-4.1.6和java-8。在迁移之后,不会调用带有Spring @Qualifier注释的Setter方法,从而导致给定变量的空值。
请注意没有抛出spring异常。只是Spring-4不调用带有@Qualifier注释的setter方法。
bean在与这个类包不同的包中。但是,在我的类中导入了相应的包。
如果需要额外的Spring-4(版本- 4.1.6)配置,请告知?
下面是示例代码片段:我的类有两个私有属性:
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