Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CAPÍTULO 1
INTRODUCCIÓN A SPRING FRAMEWORK
1. INTRODUCCIÓN A SPRING
HISTORIA
Creado por Rod Johnson.
1.0 Marzo 2003.
3.0 Diciembre 2009.
4.0 Enero 2013.
5.0 Septiembre 2017
Página oficial:
(www.springsource.org).
1. INTRODUCCIÓN A SPRING
INTRODUCCIÓN A SPRING
Framework que contiene clases para resolver muchos problemas que se
presenten en el desarrollo de un sistema informático.
Utilizado por excelencia para el desarrollo de aplicaciones empresariales.
Spring es utilizado en diversos proyectos como Instituciones Bancarias,
Aseguradoras, Instituciones Educativas entre otros, una de las mayores
ventajas de Spring, es la forma modular en el que fue creado, permitiendo
habilitar/deshabilitar las características a utilizar según se requiera y simplificar
el desarrollo JEE.
1. INTRODUCCIÓN A SPRING
SPRING FRAMEWORK
Compañía SpringSource.
Framework.
Contenedor de Inversión de Control (IoC) usando Java Reflexión.
Inyección de dependencias.
1. INTRODUCCIÓN A SPRING
CARACTERÍSTICAS DE SPRING
Spring permite desarrollar aplicaciones flexibles, altamente cohesivas y
con un bajo acoplamiento.
ARQUITECTURA MULTICAPAS
Una aplicación empresarial en Java se compone de distintas
capas:
CLIENTE SERVIDOR
Capa Web
Capa Cliente Capa Negocio Capa de Datos
(Servidor web)
Cohesión y Acoplamiento
Cohesión.- la cohesión es la medida en la que un componente se
dedica a realizar solo la tarea para la cual fue creado, delegando las
tareas complementarias a otros componentes.
Acoplamiento.- es la medida de dependencia entre componentes.
Cohesión
Acoplamiento
Hay que tomar en cuenta que una alta cohesión puede provocar un
alto acoplamiento, debido a que un componente que es pequeño (alta
cohesión) necesita de más elementos para completar una tarea, por lo
que se incrementa el número de relaciones entre los componentes
(alto acoplamiento), por ello es necesario introducir el concepto de
balance, el cual permite tener un equilibrio entre los conceptos de
cohesión y acoplamiento.
Spring por default promueve el desarrollo de sistemas con un bajo
acoplamiento y una alta cohesión, aplicando los conceptos de DI
(Dependency Injection) y AOP (Aspect Oriented Programming).
PATRONES DE DISEÑO
MVC.- es una propuesta de diseño de software utilizada para
implementar sistemas donde se requiere el uso de interfaces de
usuario.
DAO.- encapsula el acceso a la base de datos. Por lo que cuando la
capa lógica de negocio necesite interactuar con la base de datos, va a
hacerlo a través de la API que le ofrece DAO.
DTO.- (Data Transfer Object) son utilizados por DAO para transportar
los datos desde la base de datos hacia la capa de lógica de negocio y
viceversa.
CAPA CAPA DE SERVICIO CAPA ACCESO A
PRESENTACION DATOS BASE DE
SERVICE LOCATOR DATOS
MVC DTO DAO
DTO BUSINESS DELEGATE DTO
PROGRAMACIÓN ORIENTADA A INTERFACES
Implementación 1
Bean Servicio
daoHibernate
BASE DE
DATOS
IDao IDao
daoIbatis
Implementación 1
La programación hacia interfaces significa que podemos cambiar la
implementación de alguna clase de manera programática o declarativa.
En la figura mostrada podemos observar un ejemplo involucrando la
capa de servicio y la capa de datos. En este ejemplo la capa de servicio
utiliza dentro del Bean de Servicio un tipo de la interfaz iDAO.
Posteriormente y en tiempo de ejecución se debe inyectar una
implementación de esta interfaz. En la figura podemos observar que se
puede inyectar una implementación del DAO utilizando ya sea el
framework de Hibernate o de iBatis, aunque en la realidad puede ser
cualquier tecnología la que implementa esta interfaz.
Los beneficios de utilizar tipos de Interfaz en lugar de clases concretas
son varios:
• El bean de servicio no se ve afectado si se cambia la implementación
• La implementación puede utilizar fuentes de datos reales o de prueba
• Permite realizar pruebas unitarias más fácilmente, en este caso sobre
el Bean de Servicio
• Permite reducir la dependencia entre las clases, además no se
requiere conocer el detalle de la implementación, entre varios
beneficios más
El framework de Spring promueve el uso de la programación
orientada a Interfaces y no usar directamente clases concretas. Esto
se puede lograr ya sea de manera declarativa por medio del
descriptor xml de Spring o por medio de anotaciones también de
Spring.
CONTENEDOR DE SPRING (CONTENEDOR LIJERO)
Interprete
inglés
Si no tenemos Dependencia
una interfaz de inyectada
El bean de traductor
Interprete NO manualmente
NO contiene las
dependencias, por lo podemos
que manualmente cambiar de
debemos instanciar e interprete
inyectar por nuestra fácilmente
cuenta
Ejercicio práctico:
Aplicación Java con Spring y programación orientada a
interfaces Fabrica de Spring
Implementación
Inglés
Traductor 1 Dependencia
Clase de prueba
Intérprete
inyectada
intérprete
Traductor 1
Recupera el bean
de fábrica Implementación
Español
El bean de traductor ya Spring configura los beans y
contiene todas las dependencias Al manejar interfaces
dependencias inyectadas podemos cambiar fácilmente
la implementación sin afectar
el código del traductor
Ejercicios práctico versión 1 y 2
CAPÍTULO 3
INYECCIÓN DE DEPENDENCIAS (DI)
COMPONENTES
UsuarioDaoImpl PersonaDaoImpl
Index.xhtml
IUsuarioServiceService
IUsuarioDao IPersonaDao
Login.xhtml Controlador
Usuario
PersonaServiceImpl
Administration.xhtml
Usuario Persona
IPersonaService
DaoException
UsuarioDaoException PersonaDaoException
INVERSIÓN DE CONTROL
“No me llames, yo te llamaré”
Inyector de
Main Main dependencias
• Uno de los mayores beneficios de la inversión de control es la separación
de módulos y la forma en cómo se conectan dichos componentes. Esto
permite minimizar la dependencia entre ellos.
• La inyección de dependencias (DI) es una forma de Inversión de Control.
La tarea del contenedor es inyectar las dependencias a cada objeto
según se haya plasmado ya sea en el archivo de configuración o por
medio de anotaciones Java.
• En la figura el Inyector de Dependencias (contenedor) es el responsable
de revisar cada una de las dependencias
PROBLEMA DE RELACIONES ENTRE CLASES
Clase
Hace uso de
Servicio A
Clase A
Hacer uso de
Clase
Servicio B
Desventajas:
• Para reemplazar o actualizar las dependencias se debe cambiar el
código de la Clase A.
• Las clases normalmente contienen código repetido para crear,
localizar y gestionar sus dependencias.
CONCEPTO DE INYECCIÓN DE DEPENDENCIAS
Proceso general
1 Crea la instancia
Fabrica ClaseA
(Builder)
ServicioA
Inyecta una 2
3 Inyecta la dependencia clase concreta
Utiliza una interface
IServicioA
En la figura existen dos nuevos conceptos, el primero es el concepto de la
Fábrica y el segundo es el manejo de interfaces para los servicios.
La Fabrica o Builder (1) nos permite gestionar las dependencias que se necesitan
para terminar de instanciar nuestras clases, en este caso la Clase A necesita de
una dependencia del Servicio A, el cual es proporcionada por la fábrica (2).
Como se puede observar la Clase A no tiene una relación directa con la clase
concreta (Servicio A) sino con una interfaz IServicio A (3).
Lo anterior nos permite lograr de manera más eficiente los siguientes puntos:
• Desacoplar las dependencias, permitiendo cambiar o actualizar en cualquier
momento la implementación los servicios
• Escribir clases que dependen de otras clases cuya implementación no es
conocida en tiempo de compilación
• Poder probar las clases de manera aislada, sin utilizar las dependencias
• Eliminar la responsabilidad de las clases a crear y localizar las dependencias
FABRICA DE SPRING (BeanFactory)
Viene con varias implementaciones de la fabrica de beans.
Se divide en 2 categorías:
Bean Factories: retornan los Servicios mas simples.
Application Contexts: retornan los Servicios mas complejos.
FORMAS DE OBTENER EL APPLICATION CONTEXT
Existen varias maneras de cargar el archivo descriptor de Spring:
ClassPathXmlApplicationContext: Carga el Application Context localizado en el
classpath de la aplicación.
No intrusiva
No intrusiva
¿Cuál es la diferencia entre AOP y OOP?
La diferencia clave entre OOP y AOP es que el enfoque de OOP es
dividir la tarea de programación en objetos, que encapsulan datos y
métodos, mientras que el enfoque de AOP es dividir el programa en
cuestiones transversales. De hecho, AOP no es un competidor de OOP,
porque surgió del paradigma de OOP. AOP amplía OOP al abordar
algunos de sus problemas. AOP introduce formas claras de
implementar las cuestiones transversales (que podrían haberse
distribuido en varios lugares en la implementación de OOP
correspondiente) en un solo lugar. Por lo tanto, AOP hace que el
programa sea más limpio y esté más débilmente acoplado
MODULOS Y SU RESPONSABILIDAD
Modulo
Servicio de Manejo
impresión Transaccione
s
Servicio de
mensajería
Modulo
Seguridad
Servicio de
facturación
Modulo
Servicio Logging
Empleados
FUNCIONALIDAD TRANSVERSAL (cross-cutting)
Los aspectos se activan automáticamente cada vez que un componente de negocio se ejecute
Advice
Pointcu
Ejecución del programa
t
Join points
ESQUEMA GENERAL DE EJECUCION DE AOP
Lógica de Negocio Logica Advice
(Impartir clases) Aspecto Logging
(Estudiantes)
<aop:before
try {
ANTES Method:”sentarse”
poincut-ref=“ejecutar” /> estudiantes.sentarse();
profesor.ejecutar()
; Se ejecuta Lógica de Negocio
<aop:after
Method:” darOpiniones” estudiantes.darOpiniones();
poincut-ref=“ejecutar” />
DESPUES
<aop:after-throwing
} catch(Exception e) {
Method:” quejarse”
estudiantes. quejarse()
poincut-ref=“ejecutar” />
}
ADVICE EN TIEMPO DE EJECUCION
Los Aspectos en Spring son realizados en tiempo de ejecución y están envueltos por una clase
Proxy.
aop: Clase Proxy
before
Estudiante
Método
objetivo
Clase Objetivo
(target)
Cliente
(Caller)
Profesor
profesor.ejecutar()
profesor.ejecutar() ;
; aop: after-
aop: after throwing
SELECCIÓN DE JOIN POINTS CON POINCUTS
IMPLEMENTANDO POINCUTS
Tipo del
ADVICE: Retorna método Método Cualquier
cualquier tipo especificado indicado argumento
execution (* profesor.asignatura.ejecutar(..))
Especificación del
Dispara el evento en la
método coincidente
ejecución del método
coincidente
DECLARACION DE ASPECTOS EN XML
EJERCICIO PRACTICO
EJERCICIO PRACTICO:
ANOTACION DE ASPECTOS
EJERCICIO PRACTICO:
LECCION 4 JDBC CON SPRING
INTRODUCCIO
N
Se refiere al acceso a datos y la interacción entre la capa de acceso a datos y la
capa de negocio o servicio.
PUNTOS A CONSIDERAR:
Hace usos de plantillas para reducir código fuente.
Mejor manejo de excepciones.
Integración transparente con frameworks: JPA, JPO, IBATIS,HIBERNATE
OBJETIVO DE JDBC EN SPRING
Promueve la programación hacia interfaces.
Implementación DAO
EXCEPCIONES EN JDBC
TEMPLATE DATA ACCESS
PLANTILLAS DE ACCESO A DATOS
CONFIGURACION GENERAL DE SPRING JDBC
DataSource
Spring
config Coloca
Usa
Usa
Usa
Bean Factory
JDBCTemplate DaoImpl
S Extends
DaoImpl
Ejercicio Practico:
JDBC version1.
Ejercicio 2:
Objetivo: agregar casos de alta, baja, cambios y selección de datos de
la tabla persona.
Ejercicio 3,4:
Consultas de campos aislados con Spring JDBC.
Ejercicio 5,6,7:
Insertar, actualizar, eliminar datos.
TRANSACCIONES EN SPRING
TRANSACCION
Se conoce como una unidad de trabajo atómica, es decir, se realiza todo o nada
del método transaccional.
Query A
DAO A Base de
datos A
Servicio
Begin transaction
Commit/rollback
Query B
DAO B Base de datos
B
TRANSACCION
Se conoce como una unidad de trabajo atómica, es decir, se realiza todo o nada
del método transaccional.
commit
Base de
datos
HibernateTransaction Hibernate
Plataforma Manager
para el
manejo JPA Transaction JPA
transaccional Manager
Propagación Aislamiento
Atributos
Transacción
declarativa
Solo lectura
Reglas
(read-only) Rollback
Timeout
PROPAGACION DE UNA TRANSACCION
CONFIGURACION
Especificar: