Обращение к CityDao::getCity будет выполнено один раз.
Вопрос 7. Есть сервис ExampleService (см. рис). Если внешний сервис вызывает подряд методы:
Обращение к CityDao::getCity будет выполнено один раз.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Вопрос 7. Есть сервис ExampleService (см. рис). Если внешний сервис вызывает подряд методы:
exampleService.getCityFromCache(100000); exampleService.getCity(100000);
Сколько раз будет обращение к CityDao::getCity если кэш был пустым?
@Component @RequiredArgsConstructor public class ExampleService {
private final CityDao dao;
@Cacheable
public String getCityFromCache(int index) {
return dao.getCity(index);
}
public String getCity(int index) {
return getCityFromCache(index);
}
}
0 1 2 Зависит от реализации CacheManager
Ответ
Обращение к CityDao::getCity будет выполнено один раз.
Пояснение:
- Метод
getCityFromCacheпомечен аннотацией@Cacheable, значит при первом вызове с параметром100000результат будет получен изdao.getCity(100000)и закэширован. - Второй вызов
exampleService.getCity(100000)вызывает внутри себяgetCityFromCache(100000), но так как результат уже в кэше,dao.getCityне вызывается повторно.
Итог: при пустом кэше первый вызов вызывает DAO, второй — использует кэш.
Ответ: 1.