我正在开发RESTful Web服务,并且在阅读Jersey 文档时遇到了一个注释@Singleton
@Singleton
在我的Web服务中,我主要是根据作为参数提供的唯一键返回数据。当传递Student_Id时,将类推返回学生的所有信息。
所以我的问题是什么时候@Singleton适合这种Web服务?
根据文档 @RequestScoped
@RequestScoped
如果在请求处理中多次使用资源,则将始终使用同一实例。
那么在那种情况下我们不应该费心使用@Singleton权利吗?
还有什么用例,我们必须为每个请求创建一个新实例?
我确实看过这篇文章,但没有回答我的问题。
默认情况下,Jersey为每个请求创建资源类的新实例。因此,如果您不注释Jersey资源类,它将隐式使用@RequestScoped范围。它在Jersey文档中说明:
默认生命周期(不存在注释时应用)。在此范围内,将为每个新请求创建资源实例,并将其用于处理此请求。如果在请求处理中多次使用资源,则将始终使用同一实例。当资源是子资源在匹配过程中被返回多次时,可能会发生这种情况。在这种情况下,只有实例才能处理请求。
大多数情况下,您使用此默认设置,因此不使用@Singleton范围。您还可以通过使用@Singleton注释创建单例Jersey资源类。然后,您需要在该类中注册单例MyApplication类,例如,
MyApplication
@Path("/resource") @Singleton public class JerseySingletonClass { //methods ... } public class MyApplication extends ResourceConfig { /*Register JAX-RS application components.*/ public MyApplication () { register(JerseySingletonClass.class); } }