JAX-RS资源生命周期性能影响
我知道默认情况下,JAX-RS端点生命周期是每个请求一次 ,因此可以将请求特定信息注入到实例中。
我们还可以创建一个端点Singleton,意味着每个应用程序一次 ,其中请求特定信息不能注入到实例中,而是可以将其注入到请求的方法中。
1.所以我想知道哪种方法在性能方面更好 ,无论是每次请求还是每次应用一次 。
2.我还想了解这些方法的优缺点,以及注入请求的具体信息
3.您希望在API应用程序中使用哪种方法
注意:到目前为止,我一直在使用按请求一次的方法,但我总是怀疑这是否有效,绝对是使编码更容易和可重用。
从你的上一个问题开始:我总是使用默认(每个请求),我很少想到要改变它。
可能有什么理由偏爱一个而不是另一个?
- 如果您想提供一些静态内容(可能是API的欢迎文档),那么只生成一次这个内容并将其保存在单例资源类中是有意义的。 但是,您可以通过在每个请求范围的资源类中注入
@ApplicationScoped
CDI bean来实现相同的目的。 - 如果您希望将
@xxxParam
类的@xxxParam
值作为字段而不是方法参数注入,则应使用每请求生命周期。 单身人士不支持这种做法。 (这不包括通过@Context
注入)。
我做了一点测试来比较两者的表现。 您可以在github上找到源和结果 。 简而言之:我测量的差异大约为1.5%。 我认为这不会对你的申请产生太大影响。 比较JVisualVM监视的结果我倾向于说每请求测试使用更多内存,但如果这确实影响了您的应用程序,您应该自己决定。