我正在尝试使用Jersey注入的@Context参数和注入Guice的参数来使用构造注入。
这适用(纯泽西注射):
@Path("top")
public class TopLevel
{
public TopLevel(@Context ResourceContext context)
{
..
}
}
这适用(纯Guice注射):
@Path("top")
public class TopLevel
{
@Inject
public TopLevel(MyService service)
{
..
}
}
但这不工作:
@Path("top")
public class TopLevel
{
@Inject
public TopLevel(MyService service, @Context ResourceContext context)
{
..
}
}
因为Guice不知道如何注入ResourceContext。如果您查看JerseyServletModule,您会注意到它会注入以下类:
WebApplication, Providers, FeaturesAndProperties, MessageBodyWorkers, ExceptionMapperContext, HttpContext, UriInfo, ExtendedUriInfo, HttpRequestContext, HttpHeaders, Request, SecurityContext and HttpResponseContext
但不是ResourceContext。有什么想法吗?
UPDATE :我认为我不能使用字段注入,因为我需要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
。
答案 0 :(得分:0)
您应该能够使用@Context将其注入实例字段。如果这不能解决您的问题(即您确实需要在构造函数中访问它),您可以在http://java.net/jira/browse/JERSEY处提交增强请求,我们会将其添加到JerseyServletModule。这种变化很小。