2016-08-25 1 views
0

J'ai migré mon projet de spring-3.1.2 et java-6 vers Spring-4.1.6 et java-8. Les méthodes Setter avec l'annotation Spring @Qualifier ne sont pas appelées après cette migration, ce qui entraîne des valeurs nulles pour les variables données.Edition Spring4 - Méthodes Setter avec l'annotation Spring @Qualifier non invoquée

Veuillez noter qu'il n'y a pas d'exception de ressort levée. Juste que Spring-4 n'invoque pas les méthodes setter avec l'annotation @Qualifier.

Les fèves sont dans un emballage différent de ce paquet de classe. Toutefois, le package correspondant est importé dans ma classe.

Veuillez aviser si une configuration supplémentaire de Spring-4 (version 4.1.6) est nécessaire?

est Ci-dessous bout de code échantillon:

Ma classe avec 2 attributs privés:

private ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> syntheticAwareProvider; 
private ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> sfmSyntheticAwareProvider; 

setters correspondants méthodes sont:

public void setSyntheticAwareProvider(
     @Qualifier("extractionContextBasedSyntheticAssetIdentitiesProvider") ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> syntheticAwareProvider) { 
    this.syntheticAwareProvider = syntheticAwareProvider; 
} 

public void setSfmSyntheticAwareProvider(
     @Qualifier("extractionContextBasedSfmSyntheticAssetIdentitiesProvider") ExtractionContextBasedSyntheticAwareAssetIdentitiesProvider<AssetId> sfmSyntheticAwareProvider) { 
    this.sfmSyntheticAwareProvider = sfmSyntheticAwareProvider; 
} 

beans.xml correspondant est:

<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

Le '@ Qualifer' ne rien ici, comme vous ne l'utilisez autowiring mais explicite câblage en utilisant xml. Si vous utilisez autowiring, vous devez également annoter la méthode avec '@ Autowired' et vous devez supprimer la configuration xml car cela n'a aucun sens. –

Répondre

0

Citant ci-dessous printemps jira-SPR-9965, jusqu'à printemps-4, il n'y a pas de support général pour l'injection de types génériques dans un mode de sécurité.

Le problème est dû au fait que les types génériques n'ont pas été correctement gérés dans notre code hérité d'application. Avec le soutien des génériques de printemps-4, il est devenu évident. J'ai corrigé notre code d'application.

Futher, la documentation et de référence sont disponibles à:

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