当前位置: 首页 > 知识库问答 >
问题:

使用Guice的@Inject(注入子资源)注入@context字段

东方高洁
2023-03-14
bind(UserResource.class);
//Some other root-level resources for REST

serve("/rest/*").with(GuiceContainer.class);
@Inject
private ItemResource.Factory _itemResourceFactory;

@Path("/{username}/item")
public ItemResource getItems(@PathParam("username") String username) {
   User user = //...
   return this._itemResourceFactory.create(user);
}

ItemResource(子资源)再次基于构造函数中传入的用户实现为普通的Jersey类。

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

这对我来说是非常不可原谅的:我真的需要访问这些值。
作为一种解决办法,我目前将这些值作为额外的构造函数参数传递给我的子资源,我认为这一切都不舒服。

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

或者这些实现可能已经在某个地方可用了?

共有1个答案

胡浩瀚
2023-03-14

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

您可以像这样注入上下文:

@path(“/{username}/item”)public ItemResource getItems(@context HttpServletRequest request,@pathparam(“username”)String username){

 类似资料:
  • 问题内容: 分析了整个互联网,但无法弄清楚为什么会发生这种情况。我有一个最简单的项目(使用jersey-quickstart- grizzly2原型),并且只有一个Jersey资源。我将Guice用作DI,因为CDI也不想与Jersey合作。问题在于,Guice在注入Jersey的资源时无法解析要使用的类。它在外面很好用,但不适用于泽西岛。这是泽西岛的资源: 传输接口: 它的实现: 遵循Googl

  • 我正在努力实现DI,特别是使用guice的构造函数注入。我很难理解如何将泛型的类类型注入到构造函数中。 我的课程如下: 我可以在运行时使用guice将类的类型注入构造函数吗?简而言之,我可以使用guice注入Foo构造函数吗?

  • 主要内容:Google Guice 字段注入 示例,输出注入是将依赖注入对象的过程。字段注入用于将值对象设置为对对象字段的依赖。请参阅下面的示例。 Google Guice 字段注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。

  • Java 元数据(Metadata)规范(JSR-175),是J2SE 5.0和更高版本的一部分,提供一种在Java代码中指定配置数据的方法。Java代码中的元数据也被称为注解。在JavaEE中,注解用于声明对外部资源的依赖和在Java代码中的配置数据而无需在配置文件中定义该数据。 本节描述了在Java EE技术兼容的Servlet容器中注解和资源注入的行为。本节扩展了Java EE规范第5节标题

  • 问题内容: 我试图将在Spring上下文中定义的bean注入到CDI托管组件中,但没有成功。不会注入Bean,而是在每次执行注入时都会创建一个新实例。我的环境是带有JBoss Weld的Tomcat 7。 Spring ApplicationContext很简单: CDI托管bean如下所示: 这是我的 但是,当我从JSF页面访问属性时,每次访问时都会创建一个新实例。这是一个简单的示例: 我得到以

  • 我正在使用 scala play 2.5,在尝试在我的一个控制器中注入对象时出现以下错误。我正在使用 play 给出的默认注入框架,即 Guice。 这是控制器: 以下是我想注入的服务: 这就是我使用它的方式: