我正在尝试使用 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/