Читать книгу Desarrollo de aplicaciones web con Jakarta EE - César Francisco Castillo - Страница 55
Оглавление4
Contextos e inyección de dependencias (CDI)
La especificacion CDI (Contexts and Dependency Injection) fue incluida a partir de Java EE 6. Es una API que contiene un conjunto de anotaciones que le permiten al programador acceder a los recursos alojados en el contenedor e inyectar dependencias.
En este capítulo, cubriremos los siguientes temas:
* Concepto de CDI bean
* Nombres de beans
* Inyección de dependencias
* Alcances
4.1 Concepto de CDI bean
Un CDI bean es un componente de aplicacion que actua en la capa de negocio y cuyo ciclo de vida es administrado por el contenedor (Mahmoud, 2018). En el podemos desarrollar buena parte de la logica de nuestras aplicaciones JSF tal como veremos en el proximo capitulo.
4.2 Nombres de beans
Para definir el nombre de un bean, debemos utilizar la anotación @Named, la cual puede incluir o no el atributo value. Si se incluye, podemos definir un nombre personalizado, de lo contrario, el bean será nombrado por defecto con el nombre de la clase.
El siguiente fragmento de código muestra cómo utilizar la anotación @ Named:
En este caso, la clase se llama “Universidad”, pero nos referiremos a ella mediante el nombre “universidadBean”. Observe que la primera letra del nombre está en minúscula; esto es una convención que siempre se debe seguir cuando se nombran beans.
Si prescindimos del atributo valor como en este ejemplo, el bean se llamará “universidad”. Ambas formas son válidas, y queda a criterio del programador optar por una u otra.
4.3 Inyección de dependencias
El concepto de inyección de dependencias se utiliza para hacer referencia a la necesidad que tiene un “objeto A” de contar con un “objeto B” para poder realizar alguna tarea en concreto. Por ejemplo, para poder funcionar, una computadora (objeto A) necesita contar con una fuente de poder (objeto B), entre otros objetos.
Para poder incluir el objeto B en el interior del objeto A, los CDI proveen la anotación @Inject. En el siguiente fragmento de código se muestra cómo realizar una inyección de dependencias:
En el capítulo anterior utilizamos la inyección de dependencias sin saberlo. Recordémoslo observando el siguiente fragmento de código:
En este caso utilizamos la anotación @EJB en lugar de @Inject. El lector podrá preguntarse entonces: ¿cuál es la diferencia?, ¿cómo saber cuándo emplear una u otra? La respuesta podemos encontrarla en el sitio web de Adam Bien, quien afirma “que ambas anotaciones son validas para inyectar un EJB, se puede comenzar con @Inject, y en caso se ser necesario se puede utilizar @EJB, ya que permite pasar informacion adicional”.
4.4 Alcances
Los CDI beans tienen un alcance que define su vida útil, por lo que se consideran objetos contextuales (Heffelfinger, 2017).
La Figura 4.1 muestra los diferentes ámbitos definidos dentro del paquete javax.enterprise.context
Figura 4.1 Ámbitos de CDI.
Cuando un CDI bean es requerido mediante la anotación @Inject, se busca una instancia en el ámbito que corresponda y se inyecta en el lugar donde se necesite. Ahora bien, cuando esa instancia no se encuentra o no existe, se crea una nueva y se almacena para su posterior uso (Heffelfinger, 2017). La Figura 4.2 ilustra los diferentes ámbitos que forman el contexto, en los cuales el bean puede existir.
Figura 4.2 Inyección de dependencia.
Cada ámbito puede ser utilizado en diferentes situaciones en función de las necesidades de la aplicación. Por ejemplo:
* Un CDI bean con un alcance de tipo Request podría ser utilizado para realizar algún cálculo sencillo, como mostrar el resultado de una operación aritmética o permitir la persistencia de entidades, entre otras cosas.
* Un CDI bean con alcance de tipo Conversation podría ser utilizado en una secuencia de pasos, en la que un usuario completa un formulario dividido en secciones.
* Un CDI bean con alcance de tipo Session podría ser utilizado para identificar los diferentes clientes que acceden a la aplicación (manejo de usuarios).
* Un CDI bean con alcance de tipo Application podría ser utilizado para cargar un archivo de propiedades que tenga parámetros de configuración necesarios para el funcionamiento de la aplicación.
4.5 Resumen
En este capítulo realizamos un breve recorrido por la especificación CDI de Jakarta EE. Vimos la convención para nombrar un CDI bean, cómo definir sus alcances y cómo inyectarlos como dependencias mediante las anotaciones @ Inject y @EJB.
Para profundizar en conceptos relacionados con los CDI, usted puede acceder a la siguiente dirección URL: https://jakarta.ee/specifications/cdi/