我正在申请春季申请。以下是场景。 我在一个类中有多个控制器,如下面的代码所示。我在两个控制器中使用相同的服务调用。是否有一种方法可以进行一次服务调用,结果用于多个控制器< /强>
@RequestMapping(value = "/details", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody List<String> detailData() throws Exception {
List<MyDTO> results = myService.detailData();
//business logic
}
@RequestMapping(value = "/detailsMontly", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public
@ResponseBody List<String> montlyDetailData() throws Exception {
List<MyDTO> results = myService.detailData();
//business logic
}
在上面的代码中,List<MyDTO> results = myService.detailData();
在两个控制器中被调用,不必要两次,我正在点击服务层,而服务层又会访问数据库。有什么建议吗?
答案 0 :(得分:1)
是的,请看一下这一章:Cache Abstraction
TLDR; 您需要:
@Cacheable
注释@EnableCaching
CacheManager
bean 答案 1 :(得分:1)
在给定的请求上下文中,只有一次调用服务方法myService.detailData()
。您在此处显示的两种方法中的每一种都映射到不同的URL模式。因此,在给定的请求上下文中,只有一次调用您的服务。
但是,如果myService.detailData
从数据库中检索静态数据,因此在请求中是通用的,则可以将其存储在静态变量中。做类似下面的事情:
private static List<MyDTO> results = null;
@ModelAttribute("results")
public List<MyDTO> getResults() {
if (results == null) {
results = myService.detailData;
}
return results;
}