Выбор ответа Senior AOP и прокси обновлено
@Cacheable при вызове изнутри класса
Вопрос
Метод getRates() с @Cacheable("rates") вызывается из другого метода того же сервиса. Что будет при каждом вызове?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Кеш не используется: каждый раз идёт реальный запрос. Кеширование тоже реализовано прокси (CacheInterceptor), и внутренний вызов через this его обходит полностью: ни чтения, ни записи.
Варианты ответа
- Кеш работает так же, как при внешнем вызове через бин
- Результат кладётся в кеш, но при этом не читается из него
- Кеш не используется: каждый раз идёт реальный запросправильный ответ
- Spring кеширует результат внешнего метода вместо этого
Разбор
Кеширование тоже реализовано прокси (CacheInterceptor), и внутренний вызов через this его обходит полностью: ни чтения, ни записи. Это частая причина «кеш почему-то не работает» и лишней нагрузки на внешний сервис. Решение как с транзакциями: вызов через другой бин.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.