【发布时间】:2017-07-26 14:30:13
【问题描述】:
我已经尝试在互联网上找到,但我没有找到我想要的答案。 我正在 JAX-RS(球衣实现)中开发休息服务。
在我的休息服务中,我声明了一个用于调用后端服务的客户端。
我如何声明这个客户是我的问题的重点。
@Path("/restService")
public class RestServiceImpl implements RestService {
@Autowired
private BackEndClient backEndClient;
//below there are GET, POST requests...
在 application-context.xml
中<bean id="backEndClient" class="it.business.backend.client.BackEndClient" scope="prototype"> </bean>
如您所见,我已经使用 Spring 管理了 bean 实例化。而在 xml 方面,这个 bean 是原型。 因此,对于每个请求,RestServiceImpl 和 backEndClient 都会被实例化。
这是否足以保证线程安全? 关键问题可能是什么?
【问题讨论】:
-
BackEndClient 线程安全吗? Spring 可以为您管理线程,但需要保护的 BackEndClient 的重要部分取决于您
-
@efekctive,BackEndClient 不是我们开发的。我们只有公开方法的接口。实现是隐藏的。假设它是线程安全的,像原型一样声明它是正确的?
-
RestService 是控制器吗?
-
效果是一样的。但这是题外话。是的。原型应该绰绰有余。即使是单身人士也应该做到这一点
-
想象一下只有一个端点。到实例的容器映射路径将创建 RestServiceImpl 的 一个 实例。然后@Autowire 将只使用一次。因此,由于需求,原型或单例的工作方式相同
标签: java spring multithreading rest jax-rs