Что делает Spring's @Cacheable при размещении в методе, возвращающем список?

Я искал везде в интернете простой ответ на вышеуказанный вопрос и просто не могу его найти. У меня есть такой метод, как:

@Cacheable(cacheNames = "objects")
public List<Object> get() { .. }

Я использую EhCache 2.10.0 с Spring Framework 4.2.1, и я вижу следующий вывод для этого метода:

Adding cacheable method 'get' with attribute: [CacheableOperation[public java.util.List com.example.DAO.get()] caches=[objects] | key='' ...

также (в более позднем журнале)

Computed cache key 'SimpleKey []' for operation ...

что такое аннотация @Cacheable должно сделать в этой ситуации? Поместите каждый объект в кэш, набранный хэш-кодом (как намекалось в другом месте)? Или просто plonk весь список как есть в кэше под некоторым хэш-кодом на основе списка?

1 ответов


весенний док упоминает об этом:

с Кешей по сути ключ-значение каждого вызова кэшированный метод должен быть переведен в подходящий ключ для кэша доступ. Из коробки абстракция кэширования использует простой KeyGenerator на основе следующего алгоритма:

  • если никакие params не даны, то return SimpleKey.EMPTY

  • если только один param учитывая, верните этот экземпляр

  • если задано более одного параметра, верните ключ, вычисленный из хэшей всех параметров.

https://docs.spring.io/spring/docs/5.0.8.RELEASE/spring-framework-reference/integration.html#cache

когда вы аннотируете его с @Cacheable(cacheNames = "objects") вы даете ему имя кэша, по которому он может идентифицировать кэш. Поскольку ваш метод не имейте любые аргументы, для cacheName как "объекты", он уже кэширует возвращаемый объект (List<Object> в данном случае). и каждый раз, когда вызывается метод, он проверяет кэш с объектом cacheName и значением ключа Как "0". Если у него уже есть объект return, который был кэширован в предыдущий раз, он вернет объект.

Обновлено: С SimpleKey.EMPTY ключ для без парамов для весны 4+