Publicado el 2 de Junio del 2018
376 visualizaciones desde el 2 de Junio del 2018
10,8 MB
22 paginas
Creado hace 14a (01/11/2009)
Juan Galán García
Rubén García Navamuel
Javier Rodríguez Camarma
Álvaro Rodríguez Moya
- ¿Qué es Google Guice?
- Inyección de dependencias. Dependencias de clases en Java
Índice
- Primer ejemplo con Google Guice
- API de Google Guice
- Anotaciones Google Guice
- Conclusiones
UC3M
Software de Comunicaciones
¿Qué es Google Guice?
- Creado por Bob Lee de Google con licencia Apache 2.0.
- Es un Framework basado en INYECCIÓN DE DEPENDENCIAS:
- Inversión de control: principio de Hollywood
- Aligera las dependencias entre clases.
crea
Clase1
Instancia
Clase2
Clase1
inyecta
Motor de
dependencias
crea
Instancia
Clase2
- Utiliza Java 5.0 o superior: permite código tipado:
- Aprovecha los beneficios de Genéricos
- Utiliza ANOTACIONES
- Mayor reutilización de código
- Mayor facilidad para el programador
UC3M
Software de Comunicaciones
Inyección de dependencias
- Veamos un ejemplo para explicar el concepto:
public class Pegamento {
private Dependencia dep = new Dependencia();
}
public class Alambre {
private DependenciaInterface dep;
public Alambre(DependenciaInterface d) {
dep = d;
}
}
UC3M
Software de Comunicaciones
Dependencias de clases en JAVA
Storage.java
interface Storage{
public void store(String uniqueId, Data data);
public Data retrieve(String uniqueId);
}
FileStorage.java
class FileStorage implements Storage{
public void store(String uniqueId, Data data){
// Almacena el objeto en un archivo usando serialización.
}
public Data retrieve(String uniqueId){
// Código para recuperar el objeto.
}
}
UC3M
Software de Comunicaciones
Dependencias de clases en JAVA II
StorageClient.java
public class StorageClient {
public static void main(String[] args) {
// Haciendo uso del disco.
Storage storage = new FileStorage();
storage.store("123", new Data());
// Haciendo uso de la base de datos.
storage = new DatabaseStorage();
storage.store("456", new Data());
}
}
UC3M
Software de Comunicaciones
Primer ejemplo con Google Guice
Operation.java
package operation.service;
public interface Operation {
public int operation(int a, int b);
}
AddOperation.java
package operation.service;
public class AddOperation implements Add{
public int operation(int a, int b) {
return a + b;
}
}
UC3M
Software de Comunicaciones
Primer ejemplo con Google Guice II
AddModule.java
package operation.service;
import com.google.inject.Binder;
import com.google.inject.Module;
public class AddModule implements Module{
public void configure(Binder binder) {
binder.bind(Operation.class).to(AddOperation.class);
}
}
UC3M
Software de Comunicaciones
Primer ejemplo con Google Guice III
OperationClient.java
package opeation.service;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class OperationClient {
public static void main(String[] args) {
Injector injector =
Guice.createInjector(new AddModule());
Operation operation =
injector.getInstance(Operation.class);
System.out.println(operation.operation(10, 54)); //64
}
}
UC3M
Software de Comunicaciones
Api de Google Guice
- BINDER: Mapea interfaces e implementaciones.
- INJECTOR: Se encargan de crear y mantener los objetos que
son usados por los clientes.
Para obtener todas las referencias asociadas con el Injector,
simplemente se hará una llamada a Injector.getBindings( ),
la cual retornará un mapa de objetos de referencias.
- MODULE: Mantienen la configuración de las referencias. Se define la relación
concreta de la implementación que se va a utilizar.
- GUICE: Es la clase en la que los clientes interactúan directamente con los
objetos
UC3M
Software de Comunicaciones
Anotaciones JAVA
- Es una forma de añadir metadatos al código fuente JAVA
- Disponibles en tiempo de ejecución
- Son accesibles al programador mediante reflexión.
- Alternativa a XML
- Toman la forma de una declaración de interfaz con un carácter @
- EJ: @Inject
- Ventajas:
- Facilidad para el programador
- Control en tiempo de ejecución
-Desventajas:
- Poca estandarización
-Configuración expandida por todas las clases en vez de centralizada en
un solo fichero.
- Sobrecarga de memoria
UC3M
Software de Comunicaciones
Anotaciones Google Guice
- Guice viene con un pequeño conjunto de Anotaciones útiles para añadir
metadatos y valores a la aplicación.
- Con ellas se evita tener ficheros de configuración XML.
Aquí expondremos las siguientes:
@Implemented By
@Inject
@Provided By
@Singleton
UC3M
Software de Comunicaciones
Implemented by
- Esta anotación apunta a un objeto de la clase implementada del interfaz.
- Alternativa a utilizar un Module y configurar el Binder.
Operation.java
@ImplementedBy(AddOperation.class)
interface Operation{
public int operation(int a, int b);
}
UC3M
Software de Comunicaciones
Inject
- Para instancias inyectadas directamente al código del cliente, podemos
utilizar este tipo de anotación.
- Puede ser usada en un constructor de una clase.
Client.java
class Client{
@Inject public Client(MyService service){
}
}
UC3M
Software de Comunicaciones
Provided by
- Asumiendo que queremos personalizar el proceso de creación de un objeto
de algún tipo de interfaz, podremos hacerlo directamente mediante una
declaración en la interfaz:
Operation.java
@ProvidedBy(OperationProvider.class)
public interface Operation{
}
UC3M
Software de Comunicaciones
Singleton
- Por defecto, cuando un cliente requiere un objeto mediante
Injector.getInstance() múltiples veces, cada nueva instancia se crea y
retorna.
-Si queremos restringir esto, retornará una sola instancia para la clase, que se
marcará con una anotación Singleton.
MyConnection.java
@Singletonpublic class MyConnection{
public void connect(){
}
public void disconnect(){
}
}
UC3M
Software de Comunicaciones
Proceso de creación de un Injector
- Veamos con detalle el proceso de creación de un Injector:
UC3M
Software de Comunicaciones
Tiempo de ejecución de Guice
- Veamos con detalle el tiempo de ejecución de Guice:
UC3M
Software de Comunicaciones
Comparativa Google Guice – J2EE - Spring
- Ventajas Google Guice:
- Uso de Inyección de dependencias:
- Mayor flexibilidad
- Mayor facilidad para testear y probar unidades
-Uso de Anotaciones:
- Reutilización de código
- Facilidad para el desarrollador
-Desvantajas Google Guice:
-Derivadas del uso de las Anotaciones
- Poca estandarización
- Pueden provocar sobrecarga de memoria
UC3M
Software de Comunicaciones
Premios
- Ganador de los premios Jolt Awards en 2007
- Software Development (E.E.U.U.)
"The Jolts Awards are the Oscars of our industry."
— Chad Fowler
UC3M
Software de Comunicaciones
Referencias
- http://code.google.com/p/google-guice/
- http://www.javabeat.net/articles/29-introduction-to-google-guice-1.html
- http://es.wikipedia.org/wiki/Anotaci%C3%B3n_Java
- http://mgaravaglia.com.ar/blog/index.php/2008/06/16/atando-con-alambre/
- http://www.infoq.com/news/2007/03/guice
- http://www.javabeat.net/articles/29-introduction-to-google-guice-5.html
- http://deveeel.files.wordpress.com/2008/09/google_guice.pdf
UC3M
Software de Comunicaciones
Gracias por su atención
Comentarios de: Google Guice (0)
No hay comentarios