我正在尝试使用 Jersey-injected @Context 参数和 Guice-injected 参数来使用构造注入。
这有效(纯泽西注射):
@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 来实例化另一个实例字段。例如:
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
.