Goolge Guice es un excelente framework, el cual implementa el standard JSR 330 para la inyección de dependencias. Posee entre otras las siguientes características:
- Inyección de dependencias en constructor.
- Inyección de dependencias utilizando setters.
- Inyección de dependencias directamente en los atributos de la clase.
- Intercepción de métodos con filtro por anotaciones (especialmente útil para AOP).
- Configuración programática de los módulos de la aplicación.
- Definición de Fabricas (proveedores) y ámbitos para las instancias inyectadas.
- Otras.
- Generalización de aspectos en las aplicaciones y su consiguiente reducción de errores.
- Escribimos código mas mantenible.
- Escribimos código mejor testeable.
- Escribimos código mucho más reutilizable.
Primero demostraré un framgento de la clase encargada de la lógica de negocio de esta pequeña aplicación:
@Singleton
public class BirthDateManager {
private EntityManager em;
@Inject
public BirthDateManager(EntityManager em) {
this.em = em;
}
...
}
Podemos observar 3 cosas:
- Utilizamos el annotation @Singleton para indicarle al inyector que esta clase deberá instanciarla una única vez.
- Definimos el constructor que recibe las dependencias de esta clase de reglas de negocio de acuerdo con el patrón inyección de dependencias.
- Con la annotation @Inject le indicamos al inyector que debe inyectar dependencias.
public class BirthDateModule extends AbstractModule {
@Override
protected void configure() {
bind(EntityManager.class).toProvider(PersistenceFacade.class);
}
}
Con esta simple línea le indicamos al inyector que debe obtener la dependencia de un proveedor, en este caso una fachada de persistencia. A continuación el código interesante de dicha fachada:
public class PersistenceFacade implements Provider<EntityManager> {
@Override
public EntityManager get() {
return emf.createEntityManager();
}
...
}
Vemos que nuestra clase proveedora deberá implementar la interfaz Provider para que Guice sepa cual es el método que nos provee la dependencia.
Finalmente vemos el código que pone todo junto. Obtenemos la clase de las reglas del negocio con las dependencias ya satisfechas a través de un inyector:
Injector in = Guice.createInjector(new BirthDateModule());
BirthDateManager bdm = in.getInstance(BirthDateManager.class);
Como se puede ver resulta bastante simple:creamos un inyector a partir del módulo y luego le pedimos la clase de reglas del negocio a dicho inyector. Toda la magia ocurre en estas 2 líneas.
Con eso concluyo esta breve demostración de Google Guice. Espero que sea de utilidad.
Saludos!
No hay comentarios.:
Publicar un comentario