You are on page 1of 39

UNIDAD III

SPRING

Introduccin a Spring
Framework
Simplifica J2EE
Administra las dependencias entre
componentes
Framework Liviano
Inyeccin de Dependencias (DI)
Orientado a Aspectos (AOP)
Contenedor
Framework a la Carta

Definicin
Una de sus principales ventajas es la facilidad de
integracin con los estndares de Java y con las
herramientas comerciales existentes,
encargndose del acoplamiento entre objetos de
la aplicacin pero sin llegar a formar
dependencias con el framework.
La forma de obtener un API que no invada el
cdigo es basndose en interfaces en lugar de
clases.

Cuenta con una infraestructura ligera que permite

desarrollar los componentes como POJOs,


conteniendo slo la lgica de negocio y
escondiendo del programador la complejidad de la
arquitectura.
Se ha popularizado al considerarlo como un

sustituto de los Enterprise JavaBeans (EJBs).

Misin de Spring
J2EE debera ser fcil de usar
Es mejor programar utilizando interfaces en un lugar de clases. Spring
reduce la complejidad a cero utilizando interfaces
Utilizar javaBeans es la eleccin perfecta para configurar aplicaciones
El diseo OO es mas importante que cualquier implementacin tecnolgica, como J2EE

Excepciones chequeadas son sobreusadas en Java. Una plataforma no te deberia forzar a


atrapar Excepciones, cuando es poco probable que se puede uno recuperar de una de
ellas
Testing es esencial. Asi que una plataforma como Spring debera facilitarte el desarrollo
utilizando tests

SPRING :AOP,DAO,ORM
Conceptos Bsicos para entrar al mundo de
Spring

Spring AOP (Programacin Orientada al Aspecto)


Nos permite separar las

funcionalidades transversales
del resto de la aplicacin
Como el manejo de

transacciones

Nos permite construir

aspectos personalizados y
configurarlos
declarativamente

Spring DAO
Las aplicaciones Java EE utilizan el API JDBC para

acceder a RDBMS
Esto implica codificar:
Obtencin de la conexin
Instanciar PreparedStatement
Enviar parmetros a la sentencia SQL
Ejecutar el PreparedStatement
Obtener la informacin del ResultSet y poblar DTOs
Liberar los recursos utilizados

Spring DAO
Con Spring JDBC/DAO se remueve el cdigo comn y lo

coloca en templates.
Implementando el patrn template method
Agregamos el cdigo personalizado a templates pre-establecidos
Spring se encarga de liberar los recursos de base de datos

ORM
El mapeo objeto-relacional (ms conocido por su

nombre en ingls, Object-Relational mapping, o sus


siglas O/RM, ORM, y O/R mapping)
Es una tcnica de programacin para convertir datos

entre el sistema de tipos utilizado en un lenguaje de


programacin orientado a objetos y el utilizado en una
base de datos relacional.

Spring ORM
Persistencia para objetos

POJO en RDBMS
Extensin de Spring DAO
Se integra con los
principales productos ORM
Hibernate
JPA
TopLink

Aplicacin en capas con Spring


Presentacin:
Spring MVC permite implementar el controlador
Provee una capa de administracin de vistas
Lgica de negocio
Los componentes de negocio son clases Java planas
Ejecutan lgica de negocio y manipulan datos mediante los componente de la
capa de integracin
Con Spring AOP se puede manejar transacciones, seguridad y auditora
Se pueden exponer los objetos de negocio mediante servicios web
Integracin
Interacta con el RDBMS mediante el API JDBC a travs de objetos DAO
Nos podemos apoyar en Spring DAO y/o Spring ORM
Tambin puede interactuar con ERPs, mainframes o sistemas CRM

El Framework Spring

Spring es una coleccin de subframeworks que resuelven


problemas especficos y que estn agrupados en mdulos que
pueden usarse de forma separada.
Inversion of Control Container:
crea y configura objetos en una aplicacin y los entrelaza. Los recursos son
provedos a los objetos, para que ellos no tengan que buscarlos.

Aspect-Oriented Programming framework:


trata con funcionalidad una aplicacin, invocando mtodos especficos en objetos
especficos, para dar solucin a un problema que se usa en mltiples lugares.

Data Access framework:


evita la complejidad de utilizar el API de persistencia.

Transaction Management framework:


provee funcionalidad para la administracin de transacciones sin tener que
afectar el cdigo base.

Resource Abstraction framework:


localiza archivos al configurar una aplicacin.

Validation framework:
valida objetos en aplicaciones web y se encarga de la internacionalizacin.

Spring Web MVC:


provee un framework MVC que maneja el mapeo de peticiones a controladores y
de controladores a vistas. Excelente tratamiento de formularios y capacidades de
validacin.

Spring Web Flow:


implementa flujos de proceso complejos y secuencias de ayuda de forma fcil y
directa. Es un framework MVC basado en conversaciones.

Acegi Security System:


agrega funciones de autenticacin y autorizacin a objetos en una aplicacin
usando programacin orientada a aspectos.

Remote Access framework:


provee capacidades cliente-servidor a las aplicaciones por configuracin.
Objetos en el servidor pueden ser exportados como servicios remotos.

Spring Web Services:


toma una aproximacin por capas y separa el transporte de la
implementacin del servicio web tratndolo como un mecanismo de
mensajes.

Porqu es importante Spring?


La plataforma Java EE estandariz las aplicaciones empresariales
Pero no le dio importancia a un modelo simple de programacin
Construir aplicaciones de n-niveles requera demasiado esfuerzo
Localizar objetos EJB mediante JNDI
Manejo de Data Transfer Objects
Usar EJBs para soporte de transacciones implicaba crear una aplicacn
distribuida
El API de Beans de Entidad era sumamente complejo

Porqu Spring es importante?


Los desarrolladores buscaron otras alternativas:
Apache Struts: MVC mediante el API Servlet
Hibernate: Persistencia mediante POJOs con configuracin mnima

Spring es un framework multi-nivel


Se integra con los mejores frameworks de un nivel
Provee un modelo de programacin simple basado en POJOs
Con Spring AOP podemos implementar seguridad y transacciones
Con Spring JDBC-ORM nos permite una interaccin simple con la Base de

Datos

Mdulos de Spring

CONTENEDOR DE LOS
IOC
Inversin de Control

Inversion de Control
Es la Tcnica que externaliza la creacin y manejo de

dependencias de componentes
Ioc tambien es conocido como Inyeccion de dependencia
La implementacin de DI (inyeccin de dependencias )de

spring esta basada en java beans e interfaces

Inversion de Control, IoC


Es un mtodo de programacin en el que el flujo de

ejecucin de un programa se invierte respecto a


los mtodos de programacin tradicionales, en los
que la interaccin se expresa de forma imperativa
haciendo llamadas a procedimientos (procedure
calls) o funciones.

Spring Core
Columna vertebral de todo el framework
Todos los mdulos de Spring dependen de l
Tambin se le conoce como el contenedor IOC
Inversin del Control (IOC)
Registramos objetos en el framework
El framework invoca los mtodos de los objetos cuando sea necesario
El control se ha invertido: Aplicacin<-Framework

IOC no es un concepto nuevo. Ejemplo: EJBs

Spring Core
Tambin da soporte a la inyeccin de dependencias (DI)
Cmo un objeto encuentra a los objetos que necesita
Podemos lograr DI a travs de IOC
Estrategias DI
Instanciacin directa
Servicio de registro

CONTENEDOR CENTRAL
Problema:
Tener que escribir cdigo que una a los objetos de una aplicacin para
que puedan colaborar ya sea crendolos o buscndolos.

Solucin:
Mover el cdigo de configuracin fuera de la aplicacin y permitir que el
framework se encargue de ensamblar los componentes.

Contenedor Central
La inyeccin de dependencias es la

caracterstica principal del contenedor central de


Spring. Provee un mecanismo para pasar o
inyectar dependencias a los objetos. Es una forma
de inversin de control.
inversion of control

dependency lookup

dependency injection
setter injection

constructor injection

El contenedor resuelve la inyeccin a travs de un archivo de


configuracin.
Ejemplo:
package ejemplo;
public class DemoBean{
private String name;
public DemoBean(String name){this.name = name;}
public void setName(String name){this.name = name;}
}

Setter injection: primero crea el objeto y despus invoca los


mtodos modificadores.
<beans>
<bean id=bean class=ejemplo.DemoBean>
<property name=name value=Marcos/>
</bean>
</beans>

Constructor injection: invoca un constructor para inyectar los


objetos colaboradores.
<beans>
<bean id=bean class=ejemplo.DemoBean>
<constructor-arg value=Marcos/>
</bean>
</beans>

EJEMPLOS

Inyeccion de dependencias
ejemplo super Man

DI ejemplo
En telecom necesita un hroe y a tu empresa (rea de marketing) no se le
ocurri mejor idea que crear un superhroe.
El departamento de informtica agarra su IDE favorito y programa su
primera clase Java

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?

Lo malo del test case es que por tener la Super Velocidad en directo.
Indirectamente estas probando la Super Velocidad, es decir, no hay
manera de invocar Superman.doSuperCosas() sin tambin invocar al
mtodo usar de SuperVelocidad.
Quin llama a quin?
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,
tambin estaremos testeando su
SuperVelocidad.

DI Ejemplo
Usaremos entonces una tcnica comn para reducir acoplamiento. Esta
tcnica consiste en ocultar los detalles de la implementacin detrs de
interfaces. De manera que la implementacin se pueda cambiar sin impactar
a la clase cliente.

DI ejemplo
Cambiamos ahora SuperVelocidad para implementar la interface

Cambiamos tambin Superman para implementar la interface SuperHeroe

DI ejemplo
Ahora consideremos la siguiente versin:

Vemos la diferencia?

DI Ejemplo

La responsabilidad ahora pertenece a los objetos.

DI Ejemplo
Configuramos Spring para poder utilizar la inyeccin de dependencias

Creamos
SuperMain
para probar

FIN