Class MapBinder.RealMapBinder<K,V>
- All Implemented Interfaces:
Module
public static final class MapBinder.RealMapBinder<K,V> extends MapBinder<K,V> implements Module
As a MapBinder, it acts as a factory for LinkedBindingBuilders for
each of the map's values. It delegates to a Multibinder
of
entries (keys to value providers).
As a Module, it installs the binding to the map itself, as well as to a corresponding map whose values are providers. It uses the entry set multibinder to construct the map and the provider map.
As a module, this implements equals() and hashcode() in order to trick Guice into executing its configure() method only once. That makes it so that multiple mapbinders can be created for the same target map, but only one is bound. Since the list of bindings is retrieved from the injector itself (and not the mapbinder), each mapbinder has access to all contributions from all equivalent mapbinders.
Rather than binding a single Map.Entry<K, V>, the map binder binds keys and values independently. This allows the values to be properly scoped.
We use a subclass to hide 'implements Module' from the public API.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MapBinder.RealMapBinder.MapBinderProviderWithDependencies<K,V>
Nested classes/interfaces inherited from class org.elasticsearch.common.inject.multibindings.MapBinder
MapBinder.RealMapBinder<K,V>
-
Method Summary
Modifier and Type Method Description LinkedBindingBuilder<V>
addBinding(K key)
This creates two bindings.void
configure(Binder binder)
Contributes bindings and other configurations for this module tobinder
.boolean
equals(java.lang.Object o)
int
hashCode()
Methods inherited from class org.elasticsearch.common.inject.multibindings.MapBinder
newMapBinder, newMapBinder, newMapBinder, newMapBinder, newMapBinder, newMapBinder
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Method Details
-
addBinding
This creates two bindings. One for theMap.Entry<K, Provider<V>>
and another forV
.- Specified by:
addBinding
in classMapBinder<K,V>
-
configure
Description copied from interface:Module
Contributes bindings and other configurations for this module tobinder
.Do not invoke this method directly to install submodules. Instead use
Binder.install(Module)
, which ensures thatprovider methods
are discovered. -
equals
public boolean equals(java.lang.Object o)- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()- Overrides:
hashCode
in classjava.lang.Object
-