Я относительно новичок в Guice и пытаюсь понять использование requireBinding и когда / почему его использовать.
Насколько я понимаю, при создании инжектора Guice просматривает код метода configure () всех модулей и строит граф зависимостей.
Если Guice строит граф зависимостей сам по себе, то зачем модулю добавлять requireBinding? Пока я мог понять, что использование requireBinding заключается в добавлении явной зависимости к классу, который граф зависимости guice, похоже, делает в любом случае.
Я хотел бы понять, когда мы должны использовать requireBinding и каково его отсутствие в модуле.
Я прочитал официальную документацию Guice и выполнил поиск по всем существующим вопросам в Stackoverflow / любом другом блоге, но не смог найти удовлетворительный ответ на вышеуказанный вопрос.
Добавление к исходному вопросу.
Глядя на исходный код AbstractModule, реализация выглядит как
protected void requireBinding(Key<?> key) {
this.binder().getProvider(key);
}
protected void requireBinding(Class<?> type) {
this.binder().getProvider(type);
}
То, что вы предполагаете, не будет иметь никакого побочного эффекта, так как это вызов "get".
Но с другой стороны, глядя на это связующее устройство, оно добавляет какой-то элемент в список элементов типа ProviderLookup
public <T> Provider<T> getProvider(Dependency<T> dependency) {
ProviderLookup<T> element = new ProviderLookup(this.getElementSource(), dependency);
this.elements.add(element);
return element.getProvider();
}