我有一个简单的 POJO:
public class MyPOJO {
@Inject
private Fizz fizz;
private Buzz buzz;
// rest of class omitted for brevity
}
我想配置我的 Guice 模块Fizz
,使其注入两种类型的 es:
- 一个特殊的全局单例
Fizz
实例;和 - 其他(非特殊)
Fizz
实例
我想MyPOJO
注入特殊/单例实例。所以我修改了我的代码:
public class MyPOJO {
@Inject @Named("Special-Fizz")
private Fizz fizz;
private Buzz buzz;
// rest of class omitted for brevity
}
然后在我的模块中:
public class MyModule extends AbstractModule {
@Override
public void configure() {
bind(Fizz.class).annotatedWith(
Names.named("Special-Fizz"))
.to(Fizz.class);
// Other bindings here...
}
@Provides @Singleton
private Fizz providesFizz() {
return new Fizz(true, "Special", 12.0);
}
}
但是当我尝试单元测试(JUnit 4.10)时:
public class MyTest {
@Named("Special-Fizz") private Fizz specialFizz;
@Test
public void usingNamedShouldInjectSpecialFizz() {
MyModule mod = new MyModule();
Injector injector = Guice.createInjector(mod);
specialFizz = injector.getInstance(Fizz.class);
Assert.assertTrue(specialFizz != null);
}
}
这通过了。到现在为止还挺好。但是,如果我更改该specialFizz
字段的名称:
@Named("Special-Fuzz-This-Shouldnt-Work") private Fizz specialFizz;
并重新运行测试,它仍然通过。为什么?!?我在哪里会误入歧途?提前致谢。