Upload
jose-diaz
View
5.964
Download
5
Embed Size (px)
Citation preview
Inyección de
DependenciasSpring
3.0Ágil Java
José Díaz DíazCEO JoeDayzE-mail: [email protected]: http://www.joedayz.orgTwitter: joedayz
Objetivos de la Presentación
Ágil Java
Entender uno de los pilares del Spring Framework. La inyección de Dependencias.
Datos del Speaker
Ágil Java
• Consultor, Instructor, Mentor, Autor
• Trabajo con Java Empresarial,
Desarrollo Web y Tecnologías Open
Source desde hace 10 años
• CEO JoeDayz, capacitando y
desarrollando proyectos en el Estado y
empresas privadas a nivel nacional e
internacional
• Speaker frecuente en eventos y
conferencias relacionadas a Java y
Spring
• Escribiendo libro sobre Spring 3 para
este 2010
Ágil Java
Agenda
Ágil Java
• Introducción de Spring Framework
• Misión de Spring
• Módulos de Spring
• Inyección de Dependencias
Introducción a Spring Framework
Ágil Java
• Simplifica J2EE
• Administra las dependencias entre
componentes
• Framework Liviano
• Inyección de Dependencias (DI)
• Orientado a Aspectos (AOP)
• Contenedor
• Framework a la Carta
Misión de Spring
Ágil Java
Módulos de Spring
Ágil Java
Inyección de Dependencias (DI)
•Antes llamado Inversion de Control
• Martin Fowler (2004), concluyo que ningún aspecto de control
estaba siendo invertido y concluyó que si la adquisición de
dependencias estaba siendo invertido, un mejor termino que describe
esto, es, “Inyección de dependencias”.
• La clave o beneficio de DI es el pobre
acoplamiento. Si un objeto solo conoce sus
dependencias, a través, de su interface,
entonces la dependencia puede ser
Cambiada con una diferente implementación
cuando se nos apetezca, sin que
el objeto dependiente sepa del cambio
o la diferencia.
•a
DI Demo
DI Demo
• Perú necesita un héroe y a tu empresa (área de marketing) no se le
ocurrió mejor idea que crear un superhéroe.
• El departamento de informática excitado agarra su IDE favorito y
programa su primera clase Java
DI Demo
• Satisfecho con su trabajo el equipo de sistemas, coloca el proyecto
bajo control de versiones, pero, para no fallar en su demo al equipo
de marketing, decide hacer un unit tests
¿Qué problemas ves en el test case?
DI Demo
• Lo malo del test case es que por tener la Super Velocidad en duro.
Indirectamente estas probando la Super Velocidad, es decir, no hay
manera de invocar Superman.doSuperCosas() sin también invocar
al método usar de SuperVelocidad.
¿Quién llama a quién?
El problema es que el mismo Superman
es el encargado de obtener sus
superpoderes.
Por eso no hay forma de testear
Superman aisladamente, puesto que,
cada vez que probemos a Superman,
también estaremos testeando su
SuperVelocidad.
DI Demo
• Usaremos entonces una técnica común para reducir
acoplamiento. Esta técnica consiste en ocultar los detalles de la
implementación detrás de interfaces. De manera que la
implementación se pueda cambiar sin impactar a la clase cliente.
DI Demo
• Cambiamos ahora SuperVelocidad para implementar la interface
• Cambiamos también Superman para implementar la interface
SuperHeroe
DI Demo
• Ocultar las implementaciones detrás de interfaces es el camino
correcto. Pero, muchos desarrolladores fallan en como usar estas
interfaces para desacoplar objetos. Por ejemplo, veamos esta
versión.
¿Superman debe el mismo obtener su super velocidad u obtenerlo
de alguna fuerza externa? // hemos visto la película no?
DI Demo
• Ahora consideremos la siguiente versión:
¿Vemos la diferencia?
DI Demo
• La responsabilidad ahora pertenece a los objetos.
DI Demo
• Configuramos Spring para poder utilizar la inyección de
dependencias
• Creamos
SuperMain
para probar
Enjoy!
Curso de Groovy & Grails
Av. Canavall y Moreyra 380, 6to Piso, San Isidro
Lima – Perú
(511) 985806981 | (511) 985419781
www.joedayz.org