REST端点 - Singleton与RequestScoped

时间:2016-08-04 08:56:49

标签: java rest jersey singleton jax-rs

When to use @Singleton annotation of Jersey? -

  

默认情况下,Jersey会为其创建资源类的新实例   每一个要求。因此,如果您没有注释Jersey资源类,那么   隐式使用@RequestScoped范围。

由于各种原因,

@RequestScoped端点看起来更合适。它是无状态的,为每个请求提供新的实例。我已基于http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice示例实现了DAO,因此提供的EntityManager对象仅在@RequestScoped环境中有所不同,因为它们是从ThreadLocal<EntityManager>缓存(Jersey, Guice and Hibernate - EntityManager thread safety)收到的。< / p>

另一方面,我遇到过将Jersey端点注释为@Singleton的应用程序。但似乎删除注释不会改变应用程序行为/逻辑。

对于REST端点应该使用@Singleton而不是默认@RequestScoped

1 个答案:

答案 0 :(得分:1)

在REST应用程序中并不重要 - 除非你有一个基于会话的rest api(提示:不要这样做,这不是REST的重点)。

Singleton可能会变慢(在泽西岛),因为球衣使用单个类加载器,当你的API忙于回复别人时,那么对该终点的所有其他请求可能需要一段时间,直到前者完成。