我们的java spring app公开了一个Rest API,非常典型
它是分层构建的:
这些图层使用注释@RestController,@ Service等与@Autowired访问较低级别。
现在,所有这些人最终都是单身人士。但由于没有状态,它应该不是问题。多个请求可以使用相同的单例对象(在不同的执行线程中)同时进行。至少,这是我的理解。
现在,对于我们的一个新的Rest API端点,我们必须调用第三方API,因此数据路径将是这样的:
在CustomRestClient中,有一个@Autowired RestTemplate实例。因为一切都是单身,所以这个rest_template也是一个 现在我检查它是线程安全的,所以它应该没有任何并发访问异常。不过我想知道:
这是否会构成瓶颈,所有并行请求都必须等待使用这个共享的RestTemplate?有一些内部锁或东西?如何确保没有线程必须等待?
(顺便说一下,rest_template自动装配的一个原因是帮助进行模拟单元测试)
我想我的问题更多的是关于如何确保这个Spring单例体系结构可以服务于大量并行请求,即使一个层必须使用可能具有状态的注入对象?如果这是不可能的并且该对象必须用“new”实例化,那么我们如何使用模拟方法对该类进行单元测试呢?