我正在使用 GuavaEventBus
为发布-订阅消息服务创建一个。我也是第一次尝试使用 Guice。我已经阅读了 Guice 教程,并且一直在玩AbstractModule
和Binder
类。但是当我离开教程并尝试真正为我的项目工作的那一刻,我就窒息了。
我的项目有EventMonitor
一个 Guice 注入的 Guava 实例EventBus
:
public class EventMonitor {
@Inject
private EventBus guavaEventBus;
// ...
}
在我的应用程序的 Guice/DI/Bootstrapping 代码中,我定义了一个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);
ThreadManager
由于 and 上的两个(看似不可注入的)静态方法,我感到窒息Executors
,并且因为我的参考是针对 anEventBus
但实际对象是 an 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);
所以我问:考虑到我想要构建 my 的方式EventBus
,一个久经沙场的 Guice 老兵如何将这里的东西连接起来(使用ThreadFactory
、Executor
和EventBus
),以便在EventMonitor
完全配置EventBus
的情况下正确注入?我想一旦我看到这个更“复杂”的例子,我就会开始透过树木看到森林。提前致谢。