Spring4 个问题- Setter 带有 Spring @Qualifier 注释的方法未被调用
Spring4 issue- Setter methods with Spring @Qualifier annotation not getting invoked
我已将我的项目从 spring-3.1.2 和 java-6 迁移到 Spring-4.1.6 和 java-8。 Setter 带有 Spring @Qualifier 注释的方法在迁移后不会被调用,从而导致给定变量的空值。
请注意,没有抛出 spring 异常。只是 Spring-4 不会调用带有 @Qualifier 注释的 setter 方法。
bean 与这个 class 包在不同的包中。但是我的class里面导入了对应的包。
如果需要额外的Spring-4(版本- 4.1.6)配置,请提出建议?
下面是示例代码片段:
我的 class 有 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>
引用下面 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
我已将我的项目从 spring-3.1.2 和 java-6 迁移到 Spring-4.1.6 和 java-8。 Setter 带有 Spring @Qualifier 注释的方法在迁移后不会被调用,从而导致给定变量的空值。
请注意,没有抛出 spring 异常。只是 Spring-4 不会调用带有 @Qualifier 注释的 setter 方法。
bean 与这个 class 包在不同的包中。但是我的class里面导入了对应的包。
如果需要额外的Spring-4(版本- 4.1.6)配置,请提出建议?
下面是示例代码片段:
我的 class 有 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>
引用下面 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