如何教findbugs正确理解IoC字段?

yeg*_*256 6 java findbugs

这是我的班级(JAX-RS注释):

@Path("/")
public class Foo {
  @Context
  private UriInfo uriInfo;
  // ...
}
Run Code Online (Sandbox Code Playgroud)

这就是findbugs所说的:

Unwritten field: com.XXX.Foo.uriInfo
Run Code Online (Sandbox Code Playgroud)

确实,该字段是不成文的,但它是由JAX-RS servlet注入的.我认为我在这里做错了什么,但如何解决这个问题呢?

yeg*_*256 3

到目前为止我所了解的是 findbugs 是正确的。它告诉我这个变量无法从类外部访问,并且我的注释在 OOP 方面无效。JAX-RS servlet 必须打破字段访问限制才能注入UriInfo. 我必须给他一个进入这个领域的合法途径:

@Path("/")
public class Foo {
  private UriInfo uriInfo;
  @Context
  public void setUriInfo(UriInfo info) {
    this.uriInfo = info;
  }
  // ...
}
Run Code Online (Sandbox Code Playgroud)

现在它对于 findbugs 和 OOP 设计范例来说是正确的:)