私は単純なPOJOを持っています:
public class MyPOJO {
@Inject
private Fizz fizz;
private Buzz buzz;
// rest of class omitted for brevity
}
Fizz
注入する esの 2 種類があるように、Guice モジュールを構成したいと思います。
- 特別なグローバル シングルトン
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;
テストを再実行しても、まだ合格です。どうして?!?ここでどこに迷うのですか?前もって感謝します。