Java 使用Guice';s@Inject(注入子资源)

Java 使用Guice';s@Inject(注入子资源),java,glassfish,jersey,jax-rs,guice,Java,Glassfish,Jersey,Jax Rs,Guice,我目前正在开发一个RESTWebService,使用Jersey和Guice作为DI容器 为了处理请求,我依赖于配置如下的GuiceServletContextListener: bind(UserResource.class); //Some other root-level resources for REST serve("/rest/*").with(GuiceContainer.class); 因为我必须处理分层数据(一个用户应该有自己的项目,并且应该能够以/rest/user/[

我目前正在开发一个RESTWebService,使用Jersey和Guice作为DI容器

为了处理请求,我依赖于配置如下的
GuiceServletContextListener

bind(UserResource.class);
//Some other root-level resources for REST

serve("/rest/*").with(GuiceContainer.class);
因为我必须处理分层数据(一个用户应该有自己的项目,并且应该能够以
/rest/user/[Username]/item
的形式访问其他用户的项目)。为此,我正在利用泽西岛对子资源的支持

例如,my
UserResource
包含以下方法(
ItemResource.Factory
是一个Factory接口,其实现由Guice的
FactoryModuleBuilder
自动提供):

ItemResource
(子资源)然后根据构造函数中传入的用户再次作为普通Jersey类实现

但是,我的子资源也需要访问
@Context
字段(如
UriInfo
HttpServletRequest
)。根据Jersey文档,
@Context
字段不会为子资源注入,因为它们的生命周期未知(文档似乎是真的)

这对我来说是非常不幸的:我真的需要访问这些值。
作为一种解决方法,我目前正在将这些值作为额外的构造函数参数传递给我的子资源,我认为这些子资源非常有用

有没有可能告诉泽西给他们注射

然而,如果Guice本身能够注入
@Context
字段,那就更好了。
但是,简单地将
@Context
交换为
@Inject
,是行不通的,因为Guice没有注册像
UriInfo
HttpServletRequest
这样的类型

我可以创建这些映射吗?
问题是,我不知道如何在Guice
提供程序
实现中访问特定于请求的值。
是否有任何帮助程序方法可以访问这些Jersey对象的当前实例,以便编写必要的提供程序


或者这些实现可能已经在某处可用了吗?

也许您可以通过编程方式注入字段?Guice通过Injector类提供:

Injector injector = Guice.createInjector(...);
injector.injectMembers(someObjectToInject);

有关此主题的详细信息,请参阅。

是否可以通过编程方式插入字段?Guice通过Injector类提供:

Injector injector = Guice.createInjector(...);
injector.injectMembers(someObjectToInject);

有关此主题的更多信息,请参阅。

我不确定是否理解您的问题。您可以发布与“将这些值作为附加构造函数参数传递”相关的代码吗

您可以这样插入上下文:

@路径(“/{username}/item”)
public ItemResource getItems(@Context HttpServletRequest请求,@PathParam(“用户名”)字符串用户名){

我不确定我是否理解您的问题。您能否发布与“将这些值作为附加构造函数参数传递”相关的代码

您可以这样插入上下文:

@路径(“/{username}/item”)
public ItemResource getItems(@Context HttpServletRequest请求,@PathParam(“用户名”)字符串用户名){

否,我的问题是如何向Guice注册这些对象(@Context对象特定于Jersey,通常使用Jersey内部注入器注入)。在Guice中注册后,注入它们不会有问题(这是由GuiceContainer自动完成的)。不,我的问题是如何向Guice注册这些对象(@Context对象是特定于Jersey的,通常使用Jersey内部注入器注入)。在Guice中注册后,注入它们不会有问题(这是由GuiceContainer自动完成的)。