@La Mise En Cache Avec Plusieurs Clés
J'ai un service qui prend en un DTO et renvoie un résultat:
@Override
public int foo(Bar bar) {
....
}
Bar est comme suit (en simplifié):
public class Bar {
public int id;
public String name;
public String baz;
@Override
public int hashCode() {
//this is already being defined for something else
...
}
@Override
public boolean equals(Object o) {
//this is already being defined for something else
...
}
}
Je veux utiliser @Cacheable sur la méthode foo; cependant, je veux de hachage sur l'id et le nom des propriétés, mais pas de baz. Est-il un moyen de faire cela?
OriginalL'auteur Alex Beardsley | 2012-11-14
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez spécifier à l'aide d'un Ressort-EL expression le long de ces lignes:
ou de définir une modification de hashCode sur la barre et l'appeler:
OriginalL'auteur Biju Kunjummen
Vous pouvez utiliser cette approche a également
Il est suggéré de ne pas utiliser hashcode que les clés
@Cacheable clé sur plusieurs arguments de méthode
OriginalL'auteur vsingh
Les deux réponses par @Biju et @vsingh sont corrects; mais je voudrais ajouter une autre solution de rechange si le
Bar
objet que vous essayez de cache est complexe ou lafoo
méthode contient une grande quantité de paramètres à l'aide de SpEL peut-être pas la meilleure solution pour générer la clé.Sinon, vous pourriez envisager de
keyGenerator
.Exemple:
Avec cette approche, vous avez pleinement de la flexibilité de la façon dont la clé est construit.
KeyGenerator API
OriginalL'auteur Ithar
Les clés à partir d'un même Objet, vous pouvez utiliser l'objet.hashCode(), de sorte que vous n'avez pas besoin de touches spécifiques à un par un
OU si vous avez un objet et une autre clé
Je pense que c'est une meilleure solution.
OriginalL'auteur Rady Archuleta