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

在私有guice模块中公开映射

方野
2023-03-14

我在guice中有一个PrivateModule,我想公开该模块的映射

public class TestInjectionModule extends PrivateModule {
expose(Map.class).annoatedWith(Names.named("map"));
}

映射得提供程序

@Named("map")
@Provides
@Singleton
Map<String, String> providesMap(@Named("name1") String v1, @Named("name2") String v2){
 return ImmutableMap.of("key1", v1, "key2", v2);
}

我得到以下错误。

Could not expose() java.util.Map annotated with @com.google.inject.name.Named(value=map), it must be explicitly bound.

曝光这张地图的正确方法是什么?

共有1个答案

沈伟
2023-03-14

这能编出来吗?

暴露(map.class).AnnotatedWith(“map”);

根据Javadoc,annotatedwith采用注释,而不是字符串。

试试看:

暴露(map.class).AnnotatedWith(names.named(“map”));

names.named()javadoc

此外,请确保将@provides批注添加到您的provider方法中

 类似资料:
  • 我最近开始使用Google Guice,通过我在网络上找到的教程和代码工作,但现在我被困住了。 我已经尝试创建了一个,我可以在每个实体DAO的基础上扩展该。我很难弄清楚如何配置一个现有的私有Guice模块。 这里是我的,其中是一个使用作为标识的实体。类是另一个不依赖于的实体(目前,我正在尝试让它一开始就简单)。 当尝试运行以下内容时,我会得到: Google Guice用户指南在这里没有真正帮助我

  • 我正在使用Google Guice编写一个组件,它位于一个不使用任何依赖注入工具的web应用程序旁边。 组件中的Guice模块有几个不会改变的“固定”绑定和几个动态绑定,因为它们在web应用程序的每个请求中都会改变。 我解决这个问题的最简单(也是最糟糕)的方法是,每当web应用程序第一次要求组件做某事时,组件就会构建新的Guice模块,创建实例并将其返回给web应用程序: 我认为这是一种糟糕的方法

  • 问题内容: 我花了一些时间想知道是否有可能编写一个guice模块,该模块本身使用类型T进行参数化,并使用其type参数指定绑定。 像在此示例(不起作用)中那样: 我尝试了不同的方法,试图将T作为类/ TypeLiteral的实例传递给MyModule,但没有一个起作用。帮助表示赞赏。 问候,zukasz Osipiuk 问题答案: 为此,您将必须使用从头开始构建每个TypeLiteral 。您可以

  • null 原因是我两次调用;一次是从组件的安装的子类实例,另一次是从组件的安装的子类实例。 在中只安装一个实例是不可取的,因为实现了一个特定的绑定器方法,对于该方法,我只知道和中的参数。 我试图通过将和各自的主要Guice模块包装在中来解决这一问题。但是,此操作失败,出现下一个错误: 无法为%s创建绑定。它已经配置在一个或多个子注入器或私有模块上%s%n如果它在PrivateModule中,是否忘

  • 问题内容: 不得不与Guice打交道,我想知道我应该如何处理模块方面的依赖关系。 在Guice中,每个模块都是由实例提供的。因此,如果我有一个需要某种服务的模块,它将创建一个向该服务添加绑定的模块并进行安装(binder.install(module))。 现在,我有两个独立的模块,完全可以独立使用,并且都安装了相同的数据库模块。 单独使用两个模块都不会出现问题,但是如果两个模块在同一应用程序中使

  • 我正在编写一个处理多个系统的应用程序。用户可以选择他想使用的系统,我将该系统ID存储在会话(客户端会话)中 现在我有了服务类,比如说CustomerService。 我想使用 Guice 将客户实例注入控制器。但是我想使用存储在会话中的系统ID实例化客户服务。 如何访问<code>请求。Guice模块中的会话? 编辑: 简化了我上面的代码。我的实际代码使用接口。我如何使用辅助注射? 这给了我:客户