我有一个应该在注入阶段创建的类,但是这个实例不会在代码中的任何地方引用。这个类与其他人通信的方式是通过事件总线
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),我还需要记住在构造函数中更改调用。
任何建议表示赞赏
答案 0 :(得分:0)
如果提到的类应该是Singleton,那么您可以通过在AbstractModule类的configure()方法中指定绑定来急切地创建此类的对象。
bind(DefaultCounterTracker.class).to(DefaultCounterTracker.class).asEagerSingleton();