Quote Originariamente inviata da fermat Visualizza il messaggio
codice:
@Service
public class PersonaService {
  @Cacheable(value = "persone", key = "#id")
  public Persona getById(Long id) {
    // DO STUFF
    CacheManager cacheManager = new SimpleCacheManager();
    Cache cache = cacheManager.getCache("persone");




    return new Persona(id, "email@email.it");
  }
}
l'eventuale controllo che i dati siano in cache li fai la libreria in autonomia?
come faccio eventualmente a controllare che ci sia già qualcosa in cache?
No, non funziona così il caching in Spring. Spring crea un "proxy" che intercetta le chiamate al tuo service. Quando altrove fai un @Autowired del tuo PersonaService, non inietti direttamente la istanza del tuo service, ma inietti il proxy!

La logica del proxy per quel metodo @Cacheable è semplice: l'oggetto è già in cache per quella certa chiave?
No -> allora chiama il tuo getById reale e poi mette in cache il risultato prima di restituirlo.
Sì -> allora restituisce direttamente l'oggetto cachato e NON invoca più il tuo getById reale.