How to retrieve annotated instance from Guice's injector?
53,142
Solution 1
injector.getInstance(Key.get(String.class, Names.named("annotation")));
Solution 2
I'm using the following method
public <T> T getInstance(Class<T> type, Class<? extends Annotation> option) {
final Key<T> key = Key.get(type, option);
return injector.getInstance(key);
}
for this. In general, you still have the problem of creating the annotation instance, but here Names.named("annotation")
works.
![Boris Pavlović](https://i.stack.imgur.com/pbhqF.jpg?s=256&g=1)
Author by
Boris Pavlović
Interested in developing programming, concurrent model design skills, design patterns, refactoring, testing... Computer languages: java, javaScript, sql, fsp, erlang...
Updated on November 21, 2020Comments
-
Boris Pavlović over 3 years
Let's say I have a module:
Module extends AbstractModule { @Override protected void configure() { bind(String.class). annotatedWith(Names.named("annotation")). toInstance("DELIRIOUS"); } }
and I want to test the module and check if it injects the right value in a
String
field annotated withNames.named("annotation")
without having a class and a field but obtaining the value directly from the injector:@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"); }