Java JAX-RS';终点';在提出请求时表现得如何?

Java JAX-RS';终点';在提出请求时表现得如何?,java,multithreading,rest,jax-rs,Java,Multithreading,Rest,Jax Rs,有件事我不确定我是否理解正确,因此,我需要帮助:) 我看到了这个, 这是否意味着对于每个请求,转换为“端点”的类都会创建一个单独的线程?因为,否则,标题信息将不准确 您能指出一个(短:)资源,而不是JAX-WS规范,在那里我可以找到关于这个的信息吗?我想不出比JAX-WS规范更短更直接的资源了。很明显: JAX-RS提供了获取和处理有关应用程序部署上下文和单个请求上下文的信息的工具。(……) 上下文特定于特定的请求(…) 为了完整起见,我可以补充一点:上下文信息是通过@context注释获得的。

有件事我不确定我是否理解正确,因此,我需要帮助:)

我看到了这个,

这是否意味着对于每个请求,转换为“端点”的类都会创建一个单独的线程?因为,否则,标题信息将不准确


您能指出一个(短:)资源,而不是JAX-WS规范,在那里我可以找到关于这个的信息吗?

我想不出比JAX-WS规范更短更直接的资源了。很明显:

JAX-RS提供了获取和处理有关应用程序部署上下文和单个请求上下文的信息的工具。(……)

上下文特定于特定的请求(…)

为了完整起见,我可以补充一点:上下文信息是通过
@context
注释获得的。在参考资料中,上下文信息仅对使用
@Path
注释的上下文信息可用(也称为根资源)。此外,
@Context
还可以注入以下内容:
应用程序
UriInfo
HttpHeaders
请求
安全上下文
提供者

关于(请求/线程管理):

3.1.1生命周期和环境

默认情况下,为每个请求创建一个新的资源类实例 这一资源。首先调用构造函数, 然后注入任何请求的依赖项(上下文就是这些依赖项之一),然后 调用适当的方法,最后调用 对象可用于垃圾收集

可能需要一个实现 提供其他资源类生命周期、指定这些生命周期的机制 不在本规范的范围内。例如,实施 基于反转的控制框架可以支持所有 该框架提供的生命周期选项

结论是:

  • 默认情况下,每个请求由不同的资源实例处理
  • 上下文在请求时被注入(因此每个实例有一个不同的上下文)
每个特定的实现可能会稍微改变这个生命周期,但是应该维护原则(每个请求的特定上下文)


正如您所看到的,规范也没有提到线程管理。由于大多数JAX-RS实现都是基于Servlet的,因此我们可以安全地假设每个请求实例都会转到不同的线程,因为Servlet容器是每个请求的线程。

并不总是创建新线程。但是您可以保证
get()
headers
是HTTP请求的本地请求。我也很想知道这一点。我同意每个请求都由一个单独的线程处理,但是为了提高效率,多个线程通常共享同一个类实例。因此,使用@Context看起来根本不是线程安全的!Alex,这些共享类实例应该被编码为线程安全的,这意味着,它们本身应该同步对其中关键资源的访问。
@Path("/resource")
public class Resource {
    @Context
    private HttpHeaders headers;

    @GET
    public void get(@Context UriInfo uriInfo) {
       /* use headers or uriInfo variable here */
    }
}