Выбор ответа Senior AOP и прокси обновлено

@Cacheable при вызове изнутри класса

Вопрос

Метод getRates() с @Cacheable("rates") вызывается из другого метода того же сервиса. Что будет при каждом вызове?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Кеш не используется: каждый раз идёт реальный запрос. Кеширование тоже реализовано прокси (CacheInterceptor), и внутренний вызов через this его обходит полностью: ни чтения, ни записи.

Варианты ответа

  1. Кеш работает так же, как при внешнем вызове через бин
  2. Результат кладётся в кеш, но при этом не читается из него
  3. Кеш не используется: каждый раз идёт реальный запросправильный ответ
  4. Spring кеширует результат внешнего метода вместо этого

Разбор

Кеширование тоже реализовано прокси (CacheInterceptor), и внутренний вызов через this его обходит полностью: ни чтения, ни записи. Это частая причина «кеш почему-то не работает» и лишней нагрузки на внешний сервис. Решение как с транзакциями: вызов через другой бин.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме