【发布时间】: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 配置,因为这没有任何意义。