모듈이 있다고 가정 해 보겠습니다.
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")
작동합니다.