Guice:未引用对象的对象创建

时间:2017-08-26 16:15:26

标签: dependency-injection guice

我有一个应该在注入阶段创建的类,但是这个实例不会在代码中的任何地方引用。这个类与其他人通信的方式是通过事件总线

public class DefaultCounterTracker {
  private final EventBus eventBus;
  private final ReplicatedMap<String, String> trackerCache;

  @Inject
  public DefaultCounterTracker(
    EventBus eventBus,
    @Named("CountersTrackerCache") ReplicatedMap<String, String> trackerCache)
  {
    this.eventBus = eventBus;
    this.trackerCache = trackerCache;
    bindListeners();
  }

  private void bindListeners()
  {
    eventBus.localConsumer(CounterCreated.name(), (Handler<Message<String>>) event ->
    {
      handleCreation(event.body());
    });
    eventBus.localConsumer(CounterDestroyed.name(), (Handler<Message<String>>) event ->
    {
      handleDestruction(event.body());
    });
  }

调试我已经看到只有在代码中的某处写了

时才会创建这个类
@Inject
DefaultCounterTracker counterTracker

我尝试使用提供程序进行绑定但没有任何更改:似乎如果没有引用该类,Guice将无法创建它。有没有办法告诉Guice这样做?我错过了这一点吗?

我也可以手动创建实例但是如果我改变其中一个参数的默认实现(例如EventBus),我还需要记住在构造函数中更改调用。

任何建议表示赞赏

1 个答案:

答案 0 :(得分:0)

如果提到的类应该是Singleton,那么您可以通过在AbstractModule类的configure()方法中指定绑定来急切地创建此类的对象。

bind(DefaultCounterTracker.class).to(DefaultCounterTracker.class).asEagerSingleton();