Spring Inyección De Dependencias

22
Inyección de Dependencia sSpring 3.0 Ágil Java José Díaz Díaz CEO JoeDayz E-mail: [email protected] Web: http://www.joedayz.org Twitter: joedayz

Transcript of Spring Inyección De Dependencias

Page 1: Spring Inyección De Dependencias

Inyección de

DependenciasSpring

3.0Ágil Java

José Díaz DíazCEO JoeDayzE-mail: [email protected]: http://www.joedayz.orgTwitter: joedayz

Page 2: Spring Inyección De Dependencias

Objetivos de la Presentación

Ágil Java

Entender uno de los pilares del Spring Framework. La inyección de Dependencias.

Page 3: Spring 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

Page 4: Spring Inyección De Dependencias

Ágil Java

Page 5: Spring Inyección De Dependencias

Agenda

Ágil Java

• Introducción de Spring Framework

• Misión de Spring

• Módulos de Spring

• Inyección de Dependencias

Page 6: 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

Page 7: Spring Inyección De Dependencias

Misión de Spring

Ágil Java

Page 8: Spring Inyección De Dependencias

Módulos de Spring

Ágil Java

Page 9: Spring Inyección De Dependencias

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.

Page 10: Spring Inyección De Dependencias

•a

DI Demo

Page 11: Spring Inyección De Dependencias

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

Page 12: Spring Inyección De Dependencias

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?

Page 13: Spring Inyección De Dependencias

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.

Page 14: Spring Inyección De Dependencias

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.

Page 15: Spring Inyección De Dependencias

DI Demo

• Cambiamos ahora SuperVelocidad para implementar la interface

• Cambiamos también Superman para implementar la interface

SuperHeroe

Page 16: Spring Inyección De Dependencias

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?

Page 17: Spring Inyección De Dependencias

DI Demo

• Ahora consideremos la siguiente versión:

¿Vemos la diferencia?

Page 18: Spring Inyección De Dependencias

DI Demo

• La responsabilidad ahora pertenece a los objetos.

Page 19: Spring Inyección De Dependencias

DI Demo

• Configuramos Spring para poder utilizar la inyección de

dependencias

• Creamos

SuperMain

para probar

Page 20: Spring Inyección De Dependencias

Enjoy!

Page 21: Spring Inyección De Dependencias

Curso de Groovy & Grails

Page 22: Spring Inyección De Dependencias

Av. Canavall y Moreyra 380, 6to Piso, San Isidro

Lima – Perú

(511) 985806981 | (511) 985419781

www.joedayz.org

[email protected]