当前位置: 首页 > 面试题库 >

何时使用Jersey的@Singleton注释?

米景辉
2023-03-14
问题内容

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

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

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

根据文档 @RequestScoped

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

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

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

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


问题答案:

默认情况下,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);
    }
}


 类似资料:
  • 问题内容: 我在Web应用程序中使用Jersey 2.13检索数据异步。在某些情况下,请求需要一段时间(即执行复杂报告时,即EE)才能将响应返回给客户端。 当客户端不等待异步响应(离开页面,关闭浏览器等)时,将抛出ClientAbortException。此行为是预期的,但它使堆栈跟踪淹没了我的日志文件,因为在响应返回之前被取消的每个单个异步请求都会打印堆栈跟踪。 堆栈跟踪如下所示: 我也正在使用

  • 我在web应用程序中使用Jersey 2.13异步检索数据。在某些情况下,请求需要一段时间(即在执行复杂报告时)才能返回到客户端。 当客户端不等待异步响应(离开页面、关闭浏览器等)时,将引发ClientAbortException。这种行为与预期的一样,但它正在用堆栈跟踪淹没我的日志文件,因为在响应返回之前被取消的每个异步请求都会打印一个堆栈跟踪。 堆栈跟踪如下所示: 我还使用Jersey Exc

  • 问题内容: 我试图解组一些接收到的json(来自Jira Restful Web服务)。 问题是:“问题”具有“摘要”属性和字段列表。 摘要在接收的json中不是作为属性提供的,而是作为“ fields”属性的值提供的。我坚持要解组此结构: 收到的JSON: 我不想使用Jira自己的客户端(我的应用程序中不需要太多的依赖项)。 编辑:我问了我的问题,另一种尝试使其清晰的方法:如何使用jax-rs将

  • 例如,Foos的资源可能如下所示: 对于酒吧:

  • 问题内容: 注释如何在Jersey中工作,以将过滤器应用于特定的资源方法或资源类? 考虑以下注释: 它是如何工作的? 问题答案: 名称绑定 名称绑定 是一个概念,它允许对JAX-RS运行时说,仅针对特定的资源方法才执行特定的过滤器或拦截器。当过滤器或拦截器仅限于特定资源方法时,我们说它是 名称绑定的 。没有这种限制的过滤器和拦截器称为 global 。 定义名称绑定注释 可以使用注释将过滤器或拦截