Guava を使用しEventBus
てパブリッシュ/サブスクライブ メッセージング サービスを作成しています。また、初めて Guice を使用しようとしています。私は Guice のチュートリアルを読んで、AbstractModule
とBinder
クラスで遊んでいます。しかし、チュートリアルを終了して、自分のプロジェクトで実際に何かを機能させようとすると、窒息してしまいます。
私のプロジェクトにはEventMonitor
、 Guice が注入された Guava のインスタンスを持つ がありますEventBus
。
public class EventMonitor {
@Inject
private EventBus guavaEventBus;
// ...
}
アプリケーションの Guice/DI/Bootstrapping コードで、concretion を定義しますAbstractModule
。
public class MyAppModule extends AbstractModule {
@Override
public void configure() {
// Here is where I want to wire together the EventBus to give
// to the EventMonitor.
}
}
最終的には、EventBus
通常は次のように (非 Guice コードで) 構築されるようにしたいと思います。
ThreadFactory factory = ThreadManager.currentRequestThreadFactory();
Executor executor = Executors.newCachedThreadPool(factory)
EventBus eventBus = new AsyncEventBus(executor);
と の 2 つの (一見インジェクトできないように見える) 静的メソッドThreadManager
とExecutors
、私の参照は an 用ですEventBus
が、実際のオブジェクトはAsynEventBus
;であるため、窒息しています。したがって、それをバインドする方法がわかりません:
// Doesn't work because how does Guice know I'm referencing an AsyncEventBus?!?
bind(EventBus.class).toInstance(executor);
// Doesn't work because now I've lost the ability to pass the
// AsyncEventBus an 'executor' and no-arg ctor is used!
bind(EventBus.class).to(AsyncEventBus.class);
だから私は尋ねます:私が自分の を構築したい方法を考えると、完全に構成されたが適切に注入されるEventBus
ように、戦闘で使い古された Guice のベテランがここに ( 、 、 を使用して) どのように配線するのThreadFactory
でしょExecutor
うEventBus
か? このより「複雑な」例を見ると、木を通して森を見始めると思います。前もって感謝します。EventMonitor
EventBus