J'ai créé à Hazelcast Map Config dans une seule instance. J'ai une méthode de haricot dans la configuration qui envoie des cartes séparées dans 2 méthodes différentes. La classe Cacheservice a un champ qui sera injecté par l'une quelconque de ces méthodes.
J'essaie d'utiliser l'annotation de qualificatif pour obtenir une instance de cacheservice, mais j'ai besoin d'une instance CacheService pour contenir une variable de la valeur de retour de la méthode de premier type et deuxième instance d'avoir la deuxième valeur de retour de haricot. PS: J'utilise Lombok pour le constructeur automatique et l'injection Comment puis-je atteindre cela? P>
J'ai essayé d'utiliser des qualificatifs de la méthode d'annotation @bean et créez deux cours séparés pour CACHESERVICE avec des qualificateurs à l'intérieur des champs, qui ne fonctionnaient pas. P>
Classe de configuration p> blockQuote>
xxx pré> classe qui utilise la valeur de la méthode de haricot p> blockQuote>
xxx pré> classe avec un problème p> blockQuote>
xxx pré> Comme je l'ai mentionné dans le commentaire, j'ai besoin de 2 instances de classe CacheService qui a des champs avec des valeurs différentes de 2 méthodes de haricots différents. Mais je reçois "paramètre 0 de constructeur dans CacheService nécessitait un seul haricot, mais 2 ont été trouvés:" p> p>
3 Réponses :
Pour avoir plusieurs instances avec différentes valeurs injectées, vous devriez créer Les instances avec une classe Alternativement, vous pouvez également utiliser des sous-classes, par exemple < / p> Classe de configuration p>
blockQuote> classes de service p>
blockQuote> @service code> définit un haricot strong> singleton strong>, c'est-à-dire qu'il n'y a qu'une seule instance de celui-ci !!!
@configuration code> identique que vous faites pour le cache
code> elle-même. p>
Merci pour le commentaire @andreas. Je comprends votre approche, mais c'est toujours en train de jeter la même erreur. Laissez-moi dépanner et regarder d'autres réponses aussi.
La génération de constructeur de Lombok ne vous permettra pas de spécifier les qualificatifs pour les deux instances code> CACHESERVICE CODE> S.
Pour atteindre que le in et déclarer deux haricots pour cette classe: p> suivez la même approche pour CACHESERVICE code> S doit être déclaré comme
@bean code> avec les qualifications attendues de chacun des paramètres. p>
CACHESERVICE code> Déclarez un constructeur acceptant le paramètre code> cache code> p>
CachecalculationIncepteur code> qui nécessite ces haricots: P>
@EnableAspectJAutoProxy
public class CacheCalculationInterceptor {
//I need this instance with CacheService's variable IMap as returned by mainCache method of config class
private final CacheService mainCacheService;
//I need this instance with CacheService's variable IMap as returned by secCache method of config class
private final CacheService secCacheService;
public CacheCalculationInterceptor(@Qualifier("mainCacheService") CacheService mainCacheService, @Qualifier("secCacheService") CacheService secCacheService){
this.mainCacheService = mainCacheService;
this.secCacheService = secCacheService;
}
}
Vous ne pouvez pas y parvenir en utilisant CACHESERVICE < / strong> p> Classe de configuration strong> dans la définition deux haricots de @service code> annotation, mais il existe un moyen d'y parvenir en utilisant
@bean code> Annotation avec injection de constructeur
CACHEService CODE> avec respectif
imap code > p>
Mettez des noms sur les haricots @bean ("quelque chose1") @bean ("quelque chose2") et @qualifier ("Somethind1") @qualifier ("Somethind2") où vous devez les appeler. c'est ça.