0% encontró este documento útil (0 votos)
167 vistas15 páginas

Cdi-Introduccion

El documento describe Contexts and Dependency Injection (CDI), un framework para inyección de dependencias en Java EE. CDI permite que los objetos obtengan sus dependencias de forma automática sin necesidad de crearlas manualmente. Los componentes gestionados por CDI pertenecen a un ámbito, son sustituibles e interceptables. CDI también maneja el ciclo de vida de los objetos. El documento incluye un ejemplo de uso de CDI para implementar una interfaz de operaciones matemáticas.

Cargado por

Santy Xa
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
167 vistas15 páginas

Cdi-Introduccion

El documento describe Contexts and Dependency Injection (CDI), un framework para inyección de dependencias en Java EE. CDI permite que los objetos obtengan sus dependencias de forma automática sin necesidad de crearlas manualmente. Los componentes gestionados por CDI pertenecen a un ámbito, son sustituibles e interceptables. CDI también maneja el ciclo de vida de los objetos. El documento incluye un ejemplo de uso de CDI para implementar una interfaz de operaciones matemáticas.

Cargado por

Santy Xa
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

22/6/2020

Programación Distribuida

CDI: Contexts and Dependency Injection

JAIME SALVADOR

AGENDA

• Introducción
• Componentes
• Otros modelos de componentes

1
22/6/2020

Introducción

Qué es CDI?

Introducción

• Contexts and Dependency Injection (CDI) permite que los objetos obtengan sus
dependencias de forma automática.

Contexts + Dependency Injection

• Los objetos no son responsables de crear sus dependencias

• CDI maneja el ciclo de vida de los objetos

2
22/6/2020

Introducción

Introducción

3
22/6/2020

Introducción

Contexto

• Asociar componentes a un ámbito específico (por ejemplo stateful session bean)

• Crea los componentes cuando se los necesita (primer acceso) y los destruye cuando no son
necesarios

• El cliente no tiene que crear/destruir componentes

Introducción

Dependency injection

• Las dependencias de un objeto son creadas por un contenedor e inyectadas al objeto


dependiente.

4
22/6/2020

AGENDA

• Introducción
• Componentes
• Otros modelos de componentes

Componente

• En Java EE, un componente es una clase Java que contienen características adicionales:

• Es gestionado por un contenedor


• Pertenece a un ámbito (scope)
• Es sustituible (reemplazable)
• Es interceptable
• Tiene un ciclo de vida definido
• Tiene un nombre

5
22/6/2020

Componente

Es gestionado por un contenedor

• El desarrollador no instancia directamente las clases (no se utiliza new)


• Las clases son instanciadas por el contenedor

Cómo buscar un componente?


• Service Locator: la instancia de un componente se la obtiene llamando a algún método de una clase o
instancia
• Factory Method? (crea una nueva instancia)

Componente
// inicializar el contenedor
SeContainer container = SeContainerInitializer
.newInstance()
.initialize();

// buscar el objeto
Instance< Component > obj = container.select( Component.class );

Component servicio = obj.get();


// invocar el método

6
22/6/2020

Componente

FacesContext.getCurrentInstance().getApplication()
.evaluateExpressionGet(
FacesContext.getCurrentInstance(),
"#{someBean}",
ComponentBean.class );

@ManagedBean(name="someBean")
public class ComponentBean {
}

Componente

Pertenece a un ámbito (scope)

• Los componentes se almacenan en un repositorio "virtual"

• Request scope
• Session scope
• Application scope

7
22/6/2020

Componente

Pertenece a un ámbito (scope)

@RequestScoped
@ManagedBean(name="someBean")
public class ComponentBean {

Componente

Es sustituible (reemplazable)

• Los componentes pueden ser reemplazados por versiones compatibles sin que el cliente
tenga conocimiento.

• El cliente busca al componente por el nombre


• El contenedor puede retornar una implementación diferente

8
22/6/2020

Componente

Es interceptable

• Un componente es interceptable si el contenedor o el desarrollador puede agregar de


forma implícita o explícita interceptores a los métodos expuestos.

• Un interceptor es una bloque de código que se ejecuta antes o después de la ejecución de método sin que el
que invoca al método tenga conciencia de lo que sucede.

Componente

Es interceptable

9
22/6/2020

Componente

Tiene un ciclo de vida definido

• Todos los componentes Java EE tienen un ciclo de vida


• El contenedor invoca métodos en el componente en ciertos puntos de ejecución
(construcción, inicialización y destrucción)
• Este tipo de llamadas se denominan lifecycle callback

@PostConstruct y @PreDestroy

Componente

Tiene un ciclo de vida definido

public class MyCDIBean {

@PostConstruct
public void init( ) {
// initialize component
}
}

10
22/6/2020

Componente
Tiene un nombre

• La mayoría de componentes Java EE tienen asociado un nombre

@RequestScoped
@ManagedBean(name="someBean")
public class ComponentBean {

AGENDA

• Introducción
• Componentes
• Otros modelos de componentes

11
22/6/2020

Otros modelos de componentes

• Servlets
• EJB session beans y MDBs
• JSF managed beans
• JSF converters, phase listeners
• JCA
• JAX-RS

Introducción

Ejemplo

12
22/6/2020

Ejemplo

Ejemplo

package com.distribuida.cdi.servicios;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
package com.distribuida.cdi.servicios;

@ApplicationScoped
public interface Operaciones {
@Named(value="operaciones")
int sumar(int a, int b);
public class OperacionesImpl implements Operaciones {
}

public int sumar(int a, int b) {


int ret = a + b;
return ret;
}
}

13
22/6/2020

Ejemplo

META-INF/beans.xml

<?xml version="1.0" encoding="UTF-8"?>


<beans>
</beans>

Ejemplo

package com.distribuida.cdi;

import javax.enterprise.inject.Instance;
import javax.enterprise.inject.se.SeContainer;
import javax.enterprise.inject.se.SeContainerInitializer;
import com.distribuida.cdi.servicios.Operaciones;
public class PrincipalCdi {
public static void main(String[] args) {
// inicializar el contenedor
SeContainer container = SeContainerInitializer.newInstance().initialize();
// buscar el objeto de tipo Operaciones
Instance<Operaciones> obj = container.select( Operaciones.class );
Operaciones servicio = obj.get();
// invocar el método
int ret = servicio.sumar( 5, 9 );
System.out.printf( "Respuesta: %d\n", ret );
}
}

14
22/6/2020

Ejemplo

PREGUNTAS?

15

También podría gustarte