我已经将我的项目从Spring3.1.2和java-6迁移到Spring4.1.6和java-8。在迁移之后,不会调用带有Spring @限定符注释的Setter方法,从而导致给定变量的空值。
请注意,没有引发弹簧异常。只是Spring4没有使用@Qualifier注释调用setter方法.。
beans与这个类包在不同的包中。但是,相应的包是在我的类中导入的。
如果需要额外的Spring-4(Version4.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>发布于 2016-08-25 10:14:01
引用SpringJIRA-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
https://stackoverflow.com/questions/39138198
复制相似问题