如何从 Guice 的注入器中检索带注释的实例?

Posted

技术标签:

【中文标题】如何从 Guice 的注入器中检索带注释的实例?【英文标题】:How to retrieve annotated instance from Guice's injector? 【发布时间】:2011-07-04 08:03:46 【问题描述】:

假设我有一个模块:

Module extends AbstractModule

  @Override
  protected void configure()
  
    bind(String.class).
      annotatedWith(Names.named("annotation")).
        toInstance("DELIRIOUS");
  

我想测试该模块并检查它是否在用Names.named("annotation") 注释的String 字段中注入正确的值,而没有类和字段但直接从注入器获取值:

@Test
public void test()

  Injector injector = Guice.createInjector(new Module());

  // THIS IS NOT GOING TO WORK!
  String delirious = injector.getInstance(String.class); 

  assertThat(delirious, IsEqual.equalTo("DELIRIOUS");

【问题讨论】:

【参考方案1】:
injector.getInstance(Key.get(String.class, Names.named("annotation")));

【讨论】:

【参考方案2】:

我用的是下面的方法

public <T> T getInstance(Class<T> type, Class<? extends Annotation> option) 
    final Key<T> key = Key.get(type, option);
    return injector.getInstance(key);

为此。一般来说,你仍然有创建注解实例的问题,但这里Names.named("annotation") 可以。

【讨论】:

我认为值得一提的是,最初的解决方案是专门针对命名规范的。如果您创建了一个注解(特定接口 @Annotation),那么您只需将调用作为特定于 getMethod 的方法:injector.getInstance(Key.get(DesiredObject.class, Annotation.class));

以上是关于如何从 Guice 的注入器中检索带注释的实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何从微调器中检索数据并进行处理?

如何列出要注入 grails 的可用对象?

TestNG 中使用 Guice 来进行依赖注入

子模块的故障安全注入器。 google guice 中的可选绑定

史上最好用的依赖注入框架Google Guice转

当他们的构造函数参数被依赖注入时如何实例化子演员?