Senior
Сұрақ 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); } }
sobes.tech AI
AI-дан жауап
Осы мысалда:
@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);
}
}
Шақырулар:
exampleService.getCityFromCache(100000);
exampleService.getCity(100000);
Егер кэш бос болса:
-
Бірінші шақыру
getCityFromCache(100000)- Кэш бос, сондықтан
dao.getCity(100000)шақырылады, нәтижесі кэшке сақталады.
- Кэш бос, сондықтан
-
Екінші шақыру
getCity(100000)- Ішкі түрде
getCityFromCache(100000)шақырылады. - Бірақ шақыру бір класта болғандықтан, Spring AOP проксиі іске қосылмайды, және
@Cacheableаннотациясы қолданылмайды. - Сондықтан,
dao.getCity(100000)қайта шақырылады.
- Ішкі түрде
Барлығы: CityDao::getCity 2 рет шақырылады.
Бұл Spring кэштеу прокси арқылы шақырылғанда ғана жұмыс істейтінін көрсетеді (сыртқы шақыру). Бір кластағы ішкі шақырулар прокси арқылы өтпейді, және аннотациялар іске қосылмайды.