Articles

Introducción a Google Guice for DI

Hola,

Hoy, voy a hablar sobre cómo comenzar con Google Guice para inyección de dependencias en Java. En primer lugar, presentaré algunos conceptos sobre el marco, luego escribiremos una aplicación simple para ejemplificar.

Inyección de dependencias

Como hemos hablado en este post, la inyección de dependencias (DI) es una técnica de proporcionar dependencias para clientes en lugar de que estos últimos las obtengan explícitamente. DI es básicamente una forma de lograr un objetivo más general llamado principio de inversión de dependencias( DIP), que establece:

En lugar de depender de implementaciones, prefiera depender de abstracciones.

Al aplicar DI, necesitamos una forma de inyectar (cablear, enlazar) las dependencias para los clientes que las solicitan, podríamos hacerlo manualmente al instanciar la clase cliente o podríamos confiar en un framework para automatizar estas tareas y también agregar algunas funcionalidades interesantes, como la administración del ciclo de vida.

Con respecto a Java, hay una variedad de frameworks con posiblemente pros y contras, por ejemplo, Weld,Spring, Guice, etc.

En esta publicación, usaremos Guice y en una publicación futura, pretendo hablar sobre Spring, probablemente en el contexto del diseño de API RESTful con Spring Boot y Spring REST.

Google Guice

Google Guice es un framework para automatizar la inyección de dependencias al proporcionar un contenedor donde podemos mapear abstracciones e implementaciones. Después de la asignación, las dependencias se inyectarán automáticamente en los clientes cuando se soliciten.

La asignación en Guice se logra mediante la implementación de com.Google.inyectar.Módulo que normalmente se hace heredando de la clase base abstracta com.Google.inyectar.Módulo abstracto.

Después, necesitamos anular el método configure y confiar en una API fluida llamando a los métodos bind y to para definir la asignación entre la abstracción (parámetro de bind) y la implementación (parámetro de to).

Entonces, podemos inyectar las dependencias anotando sus dependencias con com.Google.inyectar.Inyectar.

Finalmente, necesitamos obtener un com.Google.inyectar.Inyector de nuestro módulo previamente definido, por lo que ahora podemos recuperar el cliente con el método getInstance y sus dependencias se inyectarán automáticamente.

Ejemplo

Este ejemplo consiste en una parte de un sistema Java que envía información de registro sobre su funcionamiento. Para simplificar la inclusión de Guice en nuestro proyecto, vamos a usar Maven como herramienta de compilación.

En el pom.xml, agregue el siguiente artefacto para Guice en la versión 4.0 en la sección dependencias:

<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></version>
</dependencia>

Vamos a crear la interfaz LogSender para representar el comportamiento: «envía el registro a algún medio»:

Este servicio será utilizado por la clase de intercambiador que tiene una referencia a LogSender y la inyección será realizada por su constructor anotado con @Inject:

La implementación StdoutLogSender enviará el registro al flujo de salida estándar, en este caso la consola:

Ahora, necesitamos decirle a Guice cómo asignar LogSender a StdoutLogSender, y lo hacemos por la clase LoggingModule:

Finalmente, en la aplicación de clase principal, podemos crear un Inyector y pasar nuestro LoggingModule a su constructor. Luego, podemos obtener una instancia de Intercambiador que tendrá su dependencia en LogSender bound:

Conclusión

En este artículo, hemos discutido los conceptos básicos sobre cómo comenzar con Google Guice para la automatización de tareas de inyección de dependencias en la aplicación Java. Escribimos una aplicación sencilla para ejemplificar cómo definir el mapeo entre abstracciones e implementaciones y cómo inyectarlas en nuestros clientes.

Espero que con este resumen básico de Guice pueda continuar sus estudios sobre la inyección de dependencias y cómo desarrollar código con un nivel más bajo de acoplamiento y un alto nivel de cohesión.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *