[java] Guice의 인젝터에서 주석이 달린 인스턴스를 검색하는 방법은 무엇입니까?

모듈이 있다고 가정 해 보겠습니다.

Module extends AbstractModule
{
  @Override
  protected void configure()
  {
    bind(String.class).
      annotatedWith(Names.named("annotation")).
        toInstance("DELIRIOUS");
  }
}

모듈을 테스트하고 클래스와 필드가 없지만 인젝터에서 직접 값을 얻지 않고 String주석이 달린 필드에 올바른 값을 주입하는지 확인하고 싶습니다 Names.named("annotation").

@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");
}



답변

injector.getInstance(Key.get(String.class, Names.named("annotation")));


답변

다음 방법을 사용하고 있습니다

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")작동합니다.


답변