Что делает 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+