如何避免多次进行网络调用?

问题描述 投票:0回答:1

我有一个 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
将从两个单独的组件调用两次,因此它将发出两个网络请求。

避免发出多个网络请求并重用同一请求中的数据的最佳方法是什么?

java spring spring-mvc
1个回答
0
投票

尝试使用 Spring 的

@Cacheable
注释。请参阅https://spring.io/guides/gs/caching

您可以在方法上应用此缓存

NetworkDataProvider.getSomeData()

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.