Download Inyección de dependencia y contexto

Document related concepts
no text concepts found
Transcript
Contextos e
Inyección Dependiente (CDI)
Roberto Moriyón
Beans en Java EE 6
• Java EE 6 contempla dos tipos de beans:
– Enterprise Java Beans (EJBs)
– Beans gestionados
• Los beans gestionados tienen asociado un
contexto (de aplicación, de sesión, de
solicitud)
Beans gestionados
• Cualquier clase normal se puede utilizar
para construir beans gestionados, pero
para que sus atributos sean accesibles
mediante UEL tiene que ser un Java Bean
• Los beans gestionados pueden
corresponder directamente a un contexto
o depender de otro bean gestionado
Beans gestionados
correspondientes directamente a
un contexto
• Los beans que corresponden directamente a un
contexto son accesibles a través de UEL
• Su nombre en UEL es el de su clase,
comenzando por minúscula
• Se crea automáticamente un bean de este tipo por
cada contexto que se crea del tipo
correspondiente
• Se especifican anotando su clase como @Named
y además como @RequestScoped,
@SessionScoped, @ApplicationScoped o
@ConversationScoped (JSF, más fino que el
contexto de sesión)
Beans gestionados
dependientes
• Los beans gestionados dependientes de
otro bean gestionado se especifican
inyectándolos como atributos de su clase
mediante la anotación @inject
• El contexto por defecto de un bean
gestionado inyectado es el del objeto en el
que se inyecta
Beans gestionados: Restricciones
dependientes del contexto
• Los beans gestionados cuyo contexto es
de sesión o aplicación tienen que ser
serializables
• Los beans gestionados con contexto de
solicitud no es preciso que sean
serializables
Configuración
• Las aplicaciones web y módulos web o
EJB que utilizan beans gestionados han
de tener un fichero de configuración
beans.xml, que puede estar vacío
Otros
• Asignación a variables en UEL: Anotación
@Named
• Inyección dependiente del contexto:
Anotación @Produces y clase Instance
para la definición de condiciones para la
inyección y búsqueda de objetos a
inyectar
• Los Web Beans pueden ser EJBs (por
ejemplo, para control de acceso)