【问题标题】:Jersey @PathParam at instance level vs at method levelJersey @PathParam 在实例级别与方法级别
【发布时间】:2015-05-07 06:49:52
【问题描述】:

在 Jersey 类中,两者中哪个更合适:

  1. 在实例变量上

@PathParam("服务标识") 私有字符串 serviceId;

  1. 在方法参数上

公共响应订阅(@PathParam("service-id") String serviceId){}

我使用第一个只是因为我几乎所有的方法都需要service-id。但是,我的一位同事对这种方法提出了评论,即 Jersey 类最终是基于 servlet 的,而 servlet 不应该有状态变量。

我在JSR-311 java docs 中读到过这个

因为注入发生在对象创建时,所以使用这个 资源类字段和 bean 属性上的注释仅 支持默认的每个请求资源类生命周期。 使用其他生命周期的资源类应该只使用这个 资源方法参数注解。

由于在 web 应用中,我的 Jersey 类将遵循每个请求的资源类生命周期,我觉得第一种方法是安全的。请思考:)

【问题讨论】:

  • 安全。在这种情况下,有状态意味着单例应用程序共享实例中的状态。如果您为每个请求配置了资源,则在请求实例的单次使用之外不会维护任何状态。

标签: java servlets jersey jax-rs jersey-2.0


【解决方案1】:

它是安全的,因为它只允许在请求范围内使用这个注解(这样每个请求都有自己的 bean/资源实例并且没有共享状态)。

不过,我可能会为每个方法提供完整的参数集,即使它有点重复。使您更容易一目了然地看到正在发生的事情。不过,这是一个代码风格问题,人们在这里可能有不同的意见。

【讨论】:

  • 我得到了代码样式部分,但现在我可以确定,如果我要重构我的代码,我这样做是出于正确的原因 :) 谢谢!
【解决方案2】:

这只是编码样式问题,因为此代码具有完全相同的结果。 我也更喜欢在方法中定义,而不是在实例中定义。

无论如何,一旦编译,结果是一样的! :)

【讨论】:

  • “无论如何,一旦编译,结果是一样的!”只是对此感到好奇 - 一样吗?它们在方法中都被视为实例变量还是局部变量?
猜你喜欢
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2012-06-29
  • 2012-07-05
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多