Jersey @PathParam 在实例级别与方法级别

Jersey @PathParam at instance level vs at method level

穿着球衣class,两者哪个更合适:

  1. 在实例变量上

@PathParam("service-id") 私人字符串 serviceId;

  1. 关于方法参数

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

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

我在 JSR-311 java docs

上读到过这个

Because injection occurs at object creation time, use of this annotation on resource class fields and bean properties is only supported for the default per-request resource class lifecycle. Resource classes using other lifecycles should only use this annotation on resource method parameters.

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

安全 由于只允许在请求范围内使用此注释(这样每个请求都有自己的 bean/resource 实例并且没有共享状态).

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

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

随便,编译一次,结果都是一样的! :)