については通知されません、私は次のGuiceモジュールを持っている:私は奇妙見つけたものGuiceのTypeListener注入されたクラス型
class MyModule extends AbstractModule {
@Override
protected void configure() {
bindListener(Matchers.any(), new TypeListener() {...});
}
@Provides
SomeClass createSomeClass(final Parameter param) {
log(param.getValue()); <-- this gets logged
...
}
}
は私TypeListener
がParameter
タイプについて通知されませんということです。プロバイダが呼び出され、SomeClass
を返しても、私はまた、ログのステートメントを参照してください明らかにParameter
Guiceによって注入された。
私はUntargetted bindingsと文の承知している:
untargettedバインディングは、タイプについての注射器を通知し、それは熱心に依存関係を作成することができます。
私はまだGuiceのは、明示的にがかが初めて注入バインドされ、あらゆるタイプのためTypeListener
を呼び出すことを期待します。
私はそのようなクラスのための目標を定められていないバインディングを経験則として作る必要がありますか?
注:Parameter
コンストラクタに@Inject
を付けてマーキングしても問題は解決しません。
EDIT:
完全な例(希望は私はあまりゴミを残すdin't)は次のとおりです。
public class TestGuice {
public static void main(String[] args) {
Injector parentInjector = Guice.createInjector(new ParentModule());
Injector childInjector = parentInjector.createChildInjector(new SubModule());
childInjector.getInstance(Runnable.class).run();
}
static class ParentModule extends AbstractModule {
@Override
protected void configure() {
}
}
static class SubModule extends AbstractModule {
@Override
protected void configure() {
bind(SampleInjectedClass.class); // <-- Comment/uncomment here
final TypeListener typeListener = new TypeListener() {
public <I> void hear(TypeLiteral<I> type, TypeEncounter<I> encounter) {
System.out.println("Type: " + type.getRawType());
}
};
bindListener(Matchers.any(), typeListener);
}
@Provides
Runnable createRunnable(final SampleInjectedClass sampleClass) {
return new Runnable() {
@Override
public void run() {
sampleClass.test();
}
};
}
}
static class SampleInjectedClass {
public void test() {
System.out.println("Test");
}
}
}
ラインが存在する場合、出力は次のようになります。
種類:クラスcom.barcap.test.TestGuice $ SampleInjectedClass
種類:クラスcom.google.inject.internal.ProviderMethod
テスト
私は行を削除した場合、私が取得:
タイプ:クラスcom.google.inject.internal.ProviderMethod
テスト
インジェクタがで作成されなかった3210コードbind(...)
は必要ありません。
指定されたコードでは問題を再現するには十分ではありません。私は投稿されたコードに特に間違ったことは何も表示されません、あなたはTypeListenerが呼び出されていないことをどのように知っていますか? –
付属の完全な例をご覧ください –
さて、私は何が起こっているのか分かりました。 –