我有一个 Spring Request Scoped 组件,它可以进行网络调用来获取一些数据:
@Component
public class NetworkDataProvider {
@Inject
private ServiceClient serviceClient;
public Optional<List<String>> getSomeData() {
return serviceClient.getSomeData(); // makes network request to get the data
}
}
我想在多个其他组件中使用这些数据:
@Component
public class Component1 {
@Inject
private NetworkDataProvider networkDataProvider;
public String getSomething() {
Optional<List<String>> data = networkDataProvider.getSomeData();
...
}
}
@Component
public class Component2 {
@Inject
private NetworkDataProvider networkDataProvider;
public String getSomething() {
Optional<List<String>> data = networkDataProvider.getSomeData();
...
}
}
然后这些组件正在控制器中使用:
@Controller
public class MyController {
@Inject
private Component1 component1;
@Inject
private Component2 Component2;
public ModelAndView mv() {
String string1 = component1.getSomething();
String string2 = component2.getSomething();
...
}
}
现在,由于
ServiceClient
将从两个单独的组件调用两次,因此它将发出两个网络请求。
避免发出多个网络请求并重用同一请求中的数据的最佳方法是什么?
尝试使用 Spring 的
@Cacheable
注释。请参阅https://spring.io/guides/gs/caching
您可以在方法上应用此缓存
NetworkDataProvider.getSomeData()
。