JAX-RS资源生命周期性能影响

我知道默认情况下,JAX-RS端点生命周期是每个请求一次 ,因此可以将请求特定信息注入到实例中。

我们还可以创建一个端点Singleton,意味着每个应用程序一次 ,其中请求特定信息不能注入到实例中,而是可以将其注入到请求的方法中。

1.所以我想知道哪种方法在性能方面更好 ,无论是每次请求还是每次应用一次

2.我还想了解这些方法的优缺点,以及注入请求的具体信息

3.您希望在API应用程序中使用哪种方法

注意:到目前为止,我一直在使用按请求一次的方法,但我总是怀疑这是否有效,绝对是使编码更容易和可重用。

从你的上一个问题开始:我总是使用默认(每个请求),我很少想到要改变它。

可能有什么理由偏爱一个而不是另一个?

  • 如果您想提供一些静态内容(可能是API的欢迎文档),那么只生成一次这个内容并将其保存在单例资源类中是有意义的。 但是,您可以通过在每个请求范围的资源类中注入@ApplicationScoped CDI bean来实现相同的目的。
  • 如果您希望将@xxxParam类的@xxxParam值作为字段而不是方法参数注入,则应使用每请求生命周期。 单身人士不支持这种做法。 (这不包括通过@Context注入)。

我做了一点测试来比较两者的表现。 您可以在github上找到源和结果 。 简而言之:我测量的差异大约为1.5%。 我认为这不会对你的申请产生太大影响。 比较JVisualVM监视的结果我倾向于说每请求测试使用更多内存,但如果这确实影响了您的应用程序,您应该自己决定。