r01f.guids
Class GUIDDispenserGuiceModule
java.lang.Object
r01f.guids.GUIDDispenserGuiceModule
- All Implemented Interfaces:
- com.google.inject.Module
public class GUIDDispenserGuiceModule
- extends java.lang.Object
- implements com.google.inject.Module
Módulo GUICE para el GUIDDispenser
IMPORTANTE! Si se implementa un nuevo tipo de dispenser es necesario añadir AQUI un nuevo binding.
Funcionamiento:
--------------
El GUIDDispenserManager utiliza la definición de un dispenser que está en formato XML y que se transforma a un objeto GUIDDispenserDef
En la definición del dispenser se indica en la propiedad 'factoryBindingId' de qué tipo se trata:
simpleGUIDDispenser
desa
36
Dado que el binding se conoce en tiempo de EJECUCION (NO en tiempo de compilación), NO se puede
utilizar Guice de la forma habitual ya que en tiempo de COMPILACION NO se sabe que impl del GuiceDispenser
hay que mapear
binder.bind(GuidDispenser.class).to(¿¿ que impl hay que cablear ??)
La solución es utilizar MapBinder que permite asociar IDs a instancias, de forma que:
- El mapeo sería algo como:
MapBinder guidDispenserFactoryMapBinder = MapBinder.newMapBinder(binder,String.class,GUIDDispenserFactory.class);
guidDispenserFactoryMapBinder.addBinding("simpleGUIDDispenser").to(SimpleGUIDDispenserFactory.class).in(Singleton.class);
guidDispenserFactoryMapBinder.addBinding("highLowGUIDDispenser").to(HighLowGUIDDispenserFactory.class).in(Singleton.class);
- En tiempo de EJECUCION, a partir del ID del GUIDDispenser, se puede obtener la instancia utilizando
una factoría de objetos GUIDDispenser
String guidDispenserImplId = "simpleGUIDDispenser";
Key
... pero esta opción requiere tener acceso al inyector de GUICE desde el GUIDDispenserManager, accediendo al singleton del mismo
(lo que NO es una buena opción de diseño), y además el código es complejo, así que es mejor dejar a GUICE que inyecte el mapa de
factorías de GUIDDispensers en el GUIDDispenserManager:
public class GUIDDispenserManager {
private final Map _guidDispensersFactories;
|
Method Summary |
void |
configure(com.google.inject.Binder binder)
|
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
GUIDDispenserGuiceModule
public GUIDDispenserGuiceModule()
configure
public void configure(com.google.inject.Binder binder)
- Specified by:
configure in interface com.google.inject.Module