jersey - 混合 Guice 构造函数注入(inject)和 Jersey @Context

标签 jersey guice

我正在尝试使用 Jersey 注入(inject)的 @Context 参数和 Guice 注入(inject)的参数来使用构造注入(inject)。

这有效(纯 Jersey 注入(inject)):

@Path("top")
public class TopLevel
{
  public TopLevel(@Context ResourceContext context)
  {
    ..
  }
}

这有效(纯 Guice 注入(inject)):

@Path("top")
public class TopLevel
{
  @Inject
  public TopLevel(MyService service)
  {
    ..
  }
}

但这有效:

@Path("top")
public class TopLevel
{
  @Inject
  public TopLevel(MyService service, @Context ResourceContext context)
  {
    ..
  }
}

因为Guice不知道如何注入(inject)ResourceContext。如果你看JerseyServletModule你会注意到它注入(inject)了以下类:

WebApplication, Providers, FeaturesAndProperties, MessageBodyWorkers, ExceptionMapperContext, HttpContext, UriInfo, ExtendedUriInfo, HttpRequestContext, HttpHeaders, Request, SecurityContext and HttpResponseContext

但不是 ResourceContext。有什么想法吗?

更新:我认为我不能使用字段注入(inject),因为我需要 ResourceContext 来实例化另一个实例字段。例如:

public class Foo
{
  public Foo(ResourceContext context) {}
}

public class Bar
{
  private final MyService service;
  private final ResourceContext context;
  private final Foo foo;

  @Inject
  public Bar(MyService service, @Context ResourceContext context)
  {
    this.foo = new Foo(context);
  }
}

如果我在构造函数之后实例化 ResourceContext,我无法实例化 Foo

最佳答案

您应该能够使用@Context 将其注入(inject)实例字段。如果这不能解决您的问题(即您确实需要在构造函数中访问它),您可以在 http://java.net/jira/browse/JERSEY 提交增强请求。我们将把它添加到 JerseyServletModule。变化很小。

关于jersey - 混合 Guice 构造函数注入(inject)和 Jersey @Context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11024620/

相关文章:

java - 使用 Stripes、Guice 管理数据库连接

java - 在 Java 中使用扩展另一个的空接口(interface)的目的是什么?

Android - 设置 Roboguice 2.0?

java - 通过 Jersey 的 JAX-RS -> HTTP 正文中没有返回内容(方法完成没有错误)

java - 处理 Jersey WS 超时

java - 类加载器(和 Guice)表现得很奇怪

java - 配置 Jetty、Jersey 和 Guice

java - org.glassfish.jersey.server.internal.process.MappableException : org. apache.catalina.connector.ClientAbortException : java.net.SocketException:

java - Jersey Rest 服务具有 HTTP 基本安全性,不接受用户

java - Jersey 重用子资源参数验证