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
?
答案 0 :(得分:1)
在REST应用程序中并不重要 - 除非你有一个基于会话的rest api(提示:不要这样做,这不是REST的重点)。
Singleton可能会变慢(在泽西岛),因为球衣使用单个类加载器,当你的API忙于回复别人时,那么对该终点的所有其他请求可能需要一段时间,直到前者完成。