2

我有一个 java rest api。我想知道的是:

假设一个特定的客户端(例如,名为 X 的人正在使用计算机 Y)对同一个 uri 进行三个调用。(例如https://stackoverflow.com/firstname/kasav/lastname/bere)。此外,假设资源有一个非静态计数器。

class ResourceA{
     int count = 0;

     @Get
     public Response service(){
        count++;
        //return count below
     }
}

现在调用者是否对所有三个调用都得到相同的响应:

1

还是来电者1接听第一个电话,然后2接第二个电话,然后3接第三个电话。

对于你们中的一些人来说,这可能是显而易见的,但对我来说不是。感谢您的帮助。

4

2 回答 2

1

假设您正在使用正确遵循 JAX-RS 规范的东西。

3.1.1 生命周期与环境

默认情况下,会为对该资源的每个请求创建一个新的资源类实例。首先调用构造函数(参见第 3.1.2 节),然后注入任何请求的依赖项(参见第 3.2 节),然后调用适当的方法(参见第 3.3 节),最后使对象可用于垃圾回收。一个实现可以提供其他资源类生命周期,指定这些生命周期的机制超出了本规范的范围。例如,基于控制反转框架的实现可以支持该框架提供的所有生命周期选项。

因此,您的问题的答案是所有呼叫者都会收到1,因为每个请求都会启动课程。

有关 JAX-RS 规范,请参阅JSR-311

于 2012-08-17T01:24:44.610 回答
1

默认情况下,JAX RS 资源是请求范围的,这意味着它为每个请求创建新实例。

要使用同一资源实例处理多个请求,您可以使用注释 @Singleton 标记资源(在本例中为 ResourceA 类)。标记为 Singleton 将使 ResourceA 类的输出为第一个请求为 1,第二个请求为 2,依此类推。

于 2017-10-11T19:46:35.727 回答