javaeewebjax-RS:我可以在其中使用实例变量吗';什么课?
我正在寻找线程安全的Servlet替代方案,我发现了JAX-RS技术 那么我可以在它的类中使用这样的实例变量吗(它是线程安全的吗):javaeewebjax-RS:我可以在其中使用实例变量吗';什么课?,java,thread-safety,jax-rs,Java,Thread Safety,Jax Rs,我正在寻找线程安全的Servlet替代方案,我发现了JAX-RS技术 那么我可以在它的类中使用这样的实例变量吗(它是线程安全的吗): ?资源范围将默认为@RequestScope,因此将为每个请求创建一个新的资源实例 从 @RequestScoped 默认生命周期(不存在注释时应用)。在此范围内,将为每个新请求创建资源实例,并用于处理此请求。如果在请求处理中多次使用该资源,则将始终使用同一实例。如果资源是子资源,并且在匹配过程中返回的次数更多,则可能会发生这种情况。在这种情况下,只有在实例上才会
?资源范围将默认为
@RequestScope
,因此将为每个请求创建一个新的资源实例
从
@RequestScoped
默认生命周期(不存在注释时应用)。在此范围内,将为每个新请求创建资源实例,并用于处理此请求。如果在请求处理中多次使用该资源,则将始终使用同一实例。如果资源是子资源,并且在匹配过程中返回的次数更多,则可能会发生这种情况。在这种情况下,只有在实例上才会为请求提供服务器
因此,只要msg
不是static
,就应该根据请求创建它
这也意味着在处理请求后,您将丢失资源中包含的任何状态,您试图解决的用例是什么?我的项目中的操作需要使用单个变量共享状态的操作集,如
set()
,register()
,execute()
。所以,如果我使用Servlet,我必须创建两个类而不是一个来实现单个操作,因为Servlet不是线程安全的。谢谢:)我只想说JAX-RS和Jersey不是一回事。Jersey是JAX-RS的一个实现。JAX-RS有它的规范,Jersey实现了它,并添加了额外的特性。@RequestScoped
注释不是JAX-RS规范的一部分,它是特定于Jersey的特性。虽然JAX-RS指定的默认范围是每个请求,但这完全取决于外部配置。我只是想提一下,因为这个问题没有提到泽西:-)
@Path("helloworld")
public class HelloWorldResource {
private String msg;
@GET
public void doSmth() {
this.msg = "test";
}
}