小编典典

何时使用Jersey的@Singleton注释?

java

我正在开发RESTful Web服务,并且在阅读Jersey
文档时遇到了一个注释@Singleton

在我的Web服务中,我主要是根据作为参数提供的唯一键返回数据。当传递Student_Id时,将类推返回学生的所有信息。

所以我的问题是什么时候@Singleton适合这种Web服务?

根据文档 @RequestScoped

如果在请求处理中多次使用资源,则将始终使用同一实例。

那么在那种情况下我们不应该费心使用@Singleton权利吗?

还有什么用例,我们必须为每个请求创建一个新实例?

我确实看过这篇文章,但没有回答我的问题。


阅读 214

收藏
2020-09-21

共1个答案

小编典典

默认情况下,Jersey为每个请求创建资源类的新实例。因此,如果您不注释Jersey资源类,它将隐式使用@RequestScoped范围。它在Jersey文档中说明

默认生命周期(不存在注释时应用)。在此范围内,将为每个新请求创建资源实例,并将其用于处理此请求。如果在请求处理中多次使用资源,则将始终使用同一实例。当资源是子资源在匹配过程中被返回多次时,可能会发生这种情况。在这种情况下,只有实例才能处理请求。

大多数情况下,您使用此默认设置,因此不使用@Singleton范围。您还可以通过使用@Singleton注释创建单例Jersey资源类。然后,您需要在该类中注册单例MyApplication类,例如,

@Path("/resource")
@Singleton
public class JerseySingletonClass {
    //methods ...
}

public class MyApplication extends ResourceConfig {

    /*Register JAX-RS application components.*/
    public MyApplication () {
        register(JerseySingletonClass.class);
    }
}
2020-09-21