SlideShare ist ein Scribd-Unternehmen logo
1 von 76
FRAMEWORK SPRING
1: INTRODUCCION
2: CONTENEDOR DE SPRING

Javier Oliver Fulguera

3: INTEGRACIÓN CON BD.
4: PROGRAMACIÓN ORIENTADA A ASPECTOS AOP

1

@javioliful – www.oliverfulguera.es
ÍNDICE
CAPITULO 1: INTRODUCCION
1.Introducción
1.1.Arquitectura
1.2.Entorno de desarrollo
CAPITULO 2: CONTENEDOR DE SPRING
2.1. INTRODUCCIÓN
2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN
2.3. LA FACTORÍA DE BEANS Y EL CONTEXTO DE LA
APLICACIÓN
2.3.1. BeanFactory
2.3.2. ApplicationContext
2.3.2.1. Inicializar el contenedor de Beans
2.3.3. Definición de Bean
2.4 Ejemplo IOC e ID con Struts

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

CAPÍTULO 3-INTEGRACIÓN CON BD.
3.1 Patrón DAO
3.2 Soporte de Spring para JDBC
3.3 DataSource
3.4 Utilización de JDBC con Spring.
CAPITULO 4: PROGRAMACIÓN ORIENTADA A ASPECTOS
AOP
4.1 Tipos de advice
4.2 Ejemplo After Returning
4.3 Implementación del ADVICE
4.4 Definición del Advice en ApplicationContext
4.5 Definición del PointCut
4.6 Implementaciones de la intercepción de metodos
4.7 Definir el bean que utilizará el proxy
4.8 Prueba de ejecución

2
CAPITULO 1: INTRODUCCION
l 1.Introducción
l 1.1.Arquitectura
l 1.2.Entorno de desarrollo

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

3
Introducción
l  Spring Framework: Define la forma de desarrollar aplicaciones J2EE,
dando soporte y simplificando complejidad propia del software corporativo.
l  Spring nos facilita la tarea de hacer una aplicación en 3 capas.
¡  Intenta una clara distinción entre las capas de forma
que el codigo sea reutilizable, no haya
dependencias entre capas.
¡  Codigo más legible.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

4
Introducción
l 

Spring es un framework ligero formada por un conjunto de piezas de
diversa índole: tagLibs, MVC, seguridad, transaccionalidad, AOP, JMX, ...,
integración con Web Services, RMI, EJBs, Hiberante, Ibatis,.... Sin
embargo, su componente principal consiste en un contenedor de
Beans que nos permite, mediante Inversión de Control (IoC), acoplar las
diversas partes de un aplicativo.

l  Un bean, en el contexto de Spring, es un objeto que es creado y manejado
por el contenedor Spring. Es importante destacar la diferencia con respecto
al uso clásico de 'bean' en J2EE: en Spring el bean no es una clase que
cumple una serie de normas o restricciones, sino que es un objeto.
l 

Toda instancia definida dentro del contenedor de bean es susceptible de:
¡  ser cambiada y/o acoplada, mediante IoC, sin ser intrusivo.
¡  ser sometida a Interceptores AOP. En particular, cabe resaltar la
transaccionalidad, lo que hace que Spring tome más relevancia en la
capa de Negocio.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

5
Introducción
l  Ventajas:
¡  Es un contenedor ligero, puede trabajar en Tomcat, no como EJB la otra
alternativa, que necesita JBOSS.
¡  No intrusivo puesto que usa IOC, no depende de clases de spring
directamente.
¡  Promueve la reutilización de componentes mediante interfaces, mejorando la
claridad y cantidad del código, ejemplo la capa DAO, es facilmente intercambiar
Hibernate por ibatis.
¡  Gratuito
¡  Fácil de usar.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

6
Introducción
¡ Framework vivo, sigue evolucionando.
¡ Se puede usar en cualquier entorno, swing , aplicaciones
web…
¡ Ayuda al uso de AOP, entre ellos el manejo declarativo de
transacciones.
¡ Integración con la mayoría de frameworks y orms.
¡ Tiene su MVC e incluso da la posibilidad de integrarse con
otros.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

7
Introducción
¡  Spring propugna ser No intrusivo, es decir, que en el código desarrollado en
nuestro aplicativo no aparecen clases de Spring. Esto es cierto al 99%, pues
únicamente es necesario usar ApplicationContext para invocar nuestros Bean.
¡  Spring además nos dispone de un conjunto de funcionalidades orientadas a
su contenedor: Trasacciones, AOP, seguridad (Acegi) y de un conjunto de
utilidades para integrar Velocity, JMX, JNDI, ...., etc. Todas ellas pueden ser
usadas de forma no intrusiva, si bien Spring nos plantea una segunda opción
intrusiva.
¡  Finalmente, Spring nos dispone de un conjunto de componetes que ya caen en
el rango de ser intrusivos: Spring-MVC y Spring-TagLib.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

8
Arquitectura

Cada módulo se corresponde con unas librerías, solo utilizaremos las
que necesitemos, la mayor parte están en spring.jar
Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

9
ARQUITECTURA
1) 

Spring core: Parte esencial de spring, proporciona funcionalidad de inyección de
dependencias, como un patrón de acceso a bean , estilo factoría y gestión como
un contenedor de bean.

3) 

Spring context: Encargado de cargar el archivo de contexto, a través del
contenedor de servlet, cargandolo en el web.xml.

4) 

Spring DAO: Basado en el patrón de diseño DAO, no es necesario crear una
conexión JDBC para cada acceso, hace al código más claro y ayuda a las
transacciones.

5) 

Spring AOP: Programación orientada a aspectos, ayuda a eliminar código
duplicado, un ejemplo sería la ejecución de eventos mientras se ejecuta un
método de una clase, su punto fuerte está en el manejo declarativo de
transacciones.

6) 

Soporte para la integración de ORM (Hibernate, Ibatis…).

7) 

Spring web: Proporciona herramientas para la realización de aplicaciones web,
entre otras la capacidad de integración con framework que implementan el
MVC, struts, jsf..

8) 

Spring MVC: Implementación de su propio MVC

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

10
ENTORNO DE DESARROLLO
l 
l 
l 
l 
l 
l 

Instalar sdk 1.5
Definir variables JAVA_HOME y Path
Descargar IDE: http://www.eclipse.org/europa (wrpp 2.0.1)
Instalar el plugin de spring de: http://springide.org/updatesite/ (core y
extension)
Descargamos las librerías de spring:
http://downloads.sourceforge.net/springframework/springframework-2.5.1-with-dependencies.zip
l 
l 
l 
l 
l 

Dist:Librerías del framework de spring.
Docs:Documentación.
Libs:Librerías ajenas a spring.
Samples:Ejemplos.
Src:Código fuente.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

11
ENTORNO DE DESARROLLO
l 
l 
l 
l 
l 
l 
l 
l 
l 
l 
l 

Configurar plugin de Tomcat.
Si vamos a trabajar con struts añadir librerías.
Instalar tomcat.
Instalar BD.
Crear un DynamicWebProject.
Añadir naturaleza spring.
Modificamos la carpeta donde salen las clases
compiladas
Importar librerías.
Añadir driver de la BD y elementos de struts.
Crear web.xml
Crear el contexto en Tomcat

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

12
CAPITULO2: CONTENEDOR DE
SPRING
l 
l 
l 
l 
l 
l 
l 
l 

2.1. INTRODUCCIÓN
2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN
2.3. LA FACTORÍA DE BEANS Y EL CONTEXTO DE LA APLICACIÓN
2.3.1. BeanFactory
2.3.2. ApplicationContext
2.3.2.1. Inicializar el contenedor de Beans
2.3.3. Definición de Bean
2.4 Ejemplo IOC e ID con Struts

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

13
2.1. INTRODUCCIÓN
l  En este tema, nos vamos a centrar en los componentes de los dos módulos
principales que constituyen el núcleo central de Spring (Spring Core y
Spring Context), de los cuales ya realizamos una breve introducción en el
primer capítulo.
l  Además, haremos especial hincapié en la utilización del patrón de diseño
Inversión de Control (IoC), y, más concretamente, Dependencia de
Inyección (ID), patrón en el que está basado la lógica de Spring.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

14
2.2. DEFINICIÓN DE DEPENDENCIA DE
INYECCIÓN
l  El concepto de Inversión de Control (IoC) es un patrón de diseño que
permite la escritura de un código mucho más limpio y sencillo, facilitando el
desacoplamiento entre los componentes de la arquitectura y la definición
declarativa (frente a la definición programática) de las relaciones entre
ellos.
l  El modelo IoC de Dependencia de Inyección se basa en el principio de
Hollywood –“No me llames, ya te llamo yo” –. Es decir, las clases de
una aplicación no necesitan buscar e instanciar las clases de las que
dependen. El control se invierte y es un componente contenedor el que
asume la responsabilidad de la definición de dichas dependencias y la
gestión de las mismas en tiempo de ejecución.
l  La utilización de IoC permite la escritura de código mucho más limpio y
sencillo, y facilita el desacoplamiento entre los componentes de la
aplicación.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

15
2.2. DEFINICIÓN DE DEPENDENCIA DE
INYECCIÓN
l 
l 
l 
l 
l 

Controlador que maneja por ti los objetos.
Crea por ti los objetos, o sea hace el new por ti.
El contenedor resuelve las dependencias por ti.
Facilita el desacoplo del código.
Desacopla el código

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

16
EJEMPLO IOC
¡ 

Ejemplo:
l  En Struts sin usar ioc:

l 

En Struts con ioc:

l 

En este último ejemplo no tenemos que instanciar ningun objeto como hacemos en
el ejemplo anterior, además spring se encargará de gestionar las dependencias y
asegurar la disponibilidad del objeto cuando sea necesario

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

17
DEPENDENCIAS DE INYECCION
l  Asimismo, Spring nos facilita varios tipos Dependencia de Inyección. A
continuación, mostramos los más utilizados:
1)  Inyección de Interfaces. Esta forma de Dependencia de Inyección es poco
utilizada por los desarrolladores en Spring. En ella, el contenedor es el
encargado de implementar los métodos relativos a esas interfaces en
tiempo de ejecución.
2)  Inyección de setter. La Dependencia de Inyección se consigue mediante
los métodos setter de los JavaBeans. Es el método más utilizado por los
desarrolladores de Spring.
3)  Inyección en el Constructor. La Dependencia de Inyección se produce al
pasarle las clases que utiliza como parámetros al constructor.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

18
DEPENDENCIAS DE INYECCION
l  Inyección en el Constructor

l  Definicion del bean

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

19
LA FACTORÍA DE BEANS Y EL
CONTEXTO DE LA APLICACIÓN
l  Spring Core es el módulo principal de Spring (en algunos libros lo
podemos encontrar como el núcleo o el corazón de Spring). Por este
motivo, debemos entender que este módulo lo componen los elementos
esenciales de Spring. Dicho módulo proporciona:
1.  Funcionalidades de Dependencia de Inyección, mediante la
implementación del patrón de diseño Inversión de Control, y las de
gestión como contenedor de beans.
2.  Un patrón de acceso a beans estilo factoría
l  El contenedor es el encargado de gestionar las instancias de las clases
configuradas en el framework.

l  Spring Context. Este módulo nos proporciona una capa superior al módulo
Core, que nos hace mucho más amigable el trabajo.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

20
2.3.1. BeanFactory
l  Hay dos maneras mediante las cuales los clientes pueden utilizar las
funcionalidades que proporciona el Framework de Spring:
¡  La factoría de beans BeanFactory. Es una representación Java del contenedor
de beans utilizado por Spring, la cual aloja la información de todos los beans de
Spring y permite al usuario instanciar dichos beans y utilizarlos.
¡  Utilizar el contexto a través del ApplicationContext. Normalmente, los
desarrolladores no operan con la clase anterior, sino que la factoría de Beans
está encapsulada en el ApplicationContext del módulo Context.
El ApplicationContext se encuentra por encima del BeanFactory y hereda de
ella todas las funcionalidades de ésta.

La factoría de Beans es en realidad quien nos instancia, configura y maneja
los beans.
Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

21
Ejemplo de Bean Factory
l  Beans.xml

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

22
Ejemplo de Bean Factory II
l  Una clase cualquiera

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

23
2.3.2. ApplicationContext
l  Como ya hemos resaltado en el apartado anterior, ApplicactionContext es
una extensión más amigable de BeanFactory.
l  El AplicationContext sólo se instancia una vez y es usada por los
programadores para:
¡  Obtener las instancias de los beans.
¡  Acceder a mensajes internacionalizados estilo I18N.
¡  Cargar múltiples contextos.
l  applicationcontext-seguridad.xml
l  applicationcontext-persistencia.xml

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

24
2.3.2.1. Inicializar el Contenedor de
Beans
1.  ClassPathXmlApplicationContext. Carga el fichero de contexto desde el
classpath de la aplicación Web, es decir, WEB-INF/classes o WEB-INF/
lib.
ApplicationContext appContext =
new ClassPathXmlApplicationContext("com/prueba/applicationContext.xml");
BeanFactory factory = (BeanFactory) appContext;

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

25
2.3.2.1. Inicializar el Contenedor de
Beans
l  Cargando el fichero desde cualquier path del servidor

String[] paths = {"/WEB-INF/applicationContext*.xml"};
ApplicationContext appContext =New ClassPathXmlApplicationContext(paths);
BeanFactory factory = (BeanFactory) appContext;

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

26
2.3.2.1. Inicializar el Contenedor de
Beans
l  FileSystemXmlApplicationContext. Carga el fichero de contexto desde
un fichero del sistema.

ApplicationContext appContext = new FileSystemXmlApplicationContext (path);
BeanFactory factory = (BeanFactory) appContext;

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

27
2.3.2.1. Inicializar el Contenedor de
Beans
l  XmlWebApplicationContext. Carga el fichero de contexto inicializado por
el ContextLoaderListener. Para cargar el contexto de esta forma,
necesitamos configurar un Listener en el fichero web.xml. El Listener
inicializaría el contexto de la aplicación al arrancar la instancia del servidor
de Aplicaciones.
Web.xml
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

28
2.3.2.1. Inicializar el Contenedor de
Beans
l  Desde el STRUTS-CONFIG-XML. Cargando el pluging de spring
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml"/>
</plug-in>

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

29
2.3.3. Definición de Bean
l  Bean: En Spring un Bean es cualquier cosa instanciable.
¡  Un Bean en Spring es susceptible de :
l  Ser cambiado y acoplado mediante IOC , sin ser intrusivo.
l  Ser sometido AOP, por ejemplo las transacciones.
l  No debe cumplir los estándares para los JavaBeans.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

30
2.4.Ejemplo de IOC e ID con Struts
¡ 

Definición del actión en struts-config.xml

¡ 

Una vez que en nuestra clase java hemos creado nuestro método set, vamos a
definir nuestro bean en el applicationContext.xml

¡ 

Ahora debemos definir UsuarioService:

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

31
2.4.Ejemplo de IOC e ID con Struts
¡ 

Y así sucesivamente hasta llegar a la capa de datos

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

32
2.4.Ejemplo de IOC e ID con Struts
¡  Inyección por setter

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

33
CAPÍTULO 3-INTEGRACIÓN CON BD.
l 
l 
l 
l 

3.1)Patrón DAO
3.2)Soporte de Spring para JDBC
3.3)DataSource
3.4)Utilización de JDBC con Spring.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

34
3.1)PATRÓN DAO
l  Separa la capa de persistencia de la capa de lógica de negocio, es el más
usado por los programadores, aporta:
¡  Reutilización
¡  Claridad

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

35
3.2)SOPORTE DE SPRING PARA JDBC
l  Paquetes que nos ofrece Spring para trabajar con
JDBC:
¡ org.springframework.jdbc.core
¡ org.springframework.jdbc.datasource
¡ org.springframework.jdbc.object
¡ org.springframework.jdbc.support

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

36
3.2)SOPORTE DE SPRING PARA JDBC
l  org.springframework.jdbc.core. Son las clases centrales de Spring JDBC. Éstas
son:
¡  • JdbcTemplate
¡  • JdbcDaoSupport

En los apartados finales de este tema mostraremos en qué se basan y cuál es su
empleo.
l  org.springframework.jdbc.datasource. Contiene tanto un conjunto de clases que
nos facilitarán el acceso a los datasource, como implementaciones básicas de
datasource.
l  org.springframework.jdbc.object. Son las clases que nos proporcionan el soporte
para realizar consultas sobre la base de datos, operaciones de modificaciones y
ejecución de procedimientos almacenados.
l  org.springframework.jdbc.support. Se encarga del tratamiento de las
excepciones de tipo SQLException y proporciona soporte para las clases de los
paquetes jdbc.core y jdbc.object.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

37
3.3) DataSource
l  Un DataSource es una interfaz que se encuentra en el paquete
javax.sql.DataSource de
J2SDK, la cual se emplea como factoría de objetos Connection.
l  Gracias al empleo de un objeto DataSource, nos ahorraremos mucho
tiempo y esfuerzo, y controlaremos mejor los posibles errores que se
producen al dar de alta una conexión.
l  Un objeto que usa DataSource puede registrarse por ejemplo:
¡  JNDI
¡  Struts
¡  Spring
l  Mediante programación
l  Configurara el DataSource en el fichero de configuración.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

38
3.3) DataSource
l  Por JNDI.
¡  JNDI es un estándar J2EE para acceder y nominar directorios. Spring nos
proporciona unaclase org.springframework.jndi.JndiObjectFactoryBean que
nos da soporte a esta tecnología. Es ampliamente utilizado en aplicaciones
comerciales.

<bean id="myDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/userDB" />
</bean>

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

39
3.3) DataSource
l  Con Struts
¡  Otra alternativa que proporciona Spring, es la configuración de un DataSource
fuera del contenedor de J2EE, utilizando la clase
org.apache.commons.dbcp.BasicDataSource, que pertenece al proyecto
Apache's Jakarta Commons DBCP. Mediante esta clase, podremos establecer
algunas propiedades adicionales:
<!-- ============= Pool de Conexiones ============== -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroymethod="
close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/libreria</value>
</property>
<property name="username">
<value>root</value>
</property>
Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

40
3.3) DataSource
l  Usando una clase
¡  Programando una clase, en la cual utilizaremos un objeto de la clase
BasicDataSource, que no es más que una clase que implementa la interfaz
DataSource, y le añadimos los parámetros necesarios, como se muestra a
continuación:

BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/libreria");
ds.setUsername("root");
ds.setPassword("");

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

41
3.3) DataSource
l  Utilizando Spring

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

42
3.3) DataSource
l  Con un fichero de propietades
1.  Registrar el fichero

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

43
3.3) DataSource
2)  Creando el fichero: dao.properties

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

44
3.3) DataSource
3)  Utilizando el fichero

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

45
3.4)Utilización de JDBC con Spring.
l  Una vez configurado el DataSource, estudiaremos cómo Spring utiliza el
patrón DAO para trabajar con la capa de persistencia.
1.  Definimos una interfaz con todos los métodos de acceso a BD.
2.  Definimos una clase que implemente dicha interfaz.
3.  Definición del Bean en el archivo de contexto.

l  Comenzaremos por observar un fragmento del fichero aplicacióncontext.xml en el cual se define un bean para la capa DAO utilizando
Spring:

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

46
3.4)Utilización de JDBC con Spring.
l  Usando JDBC como lo conocíamos hasta ahora.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

47
3.4)Utilización de JDBC con Spring.
l  Utilizando las clases de Spring para trabajar con JDBC
l 

JDBCTemplate
¡  Constructores
l  JdbcTemplate j=new JdbcTemplate();
l  JdbcTemplate j=new JdbcTemplate(DataSource ds);
l  JdbcTemplate j=new JdbcTemplate(DataSource ds, boolean lazyInit);
¡  Operaciones de consulta
l  int queryForInt(String sql);
l  int queryForInt(String sql, Object [] args);
l  long queryForLong(String sql);
l  long queryForLong(String sql, Object [] args);
l  Object queryForObject(String sql,Class requiredType);
l  Object queryForObject(String sql,Class requiredType,Object [] args);
l  List queryForList(String sql);
l  List queryForList(String sql,Object [] args);
l  List queryForList(String sql,ParameterizedRowMapper m);
l  int update(String sql);
l  int update(String sql, Object [] args);

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

48
3.4)Utilización de JDBC con Spring.
l JdbcDaoSupport
¡  No es necesario obtener el DataSource y crear un JdbcTemplate, nos ofrece ya
un getJdbcTemplate().
¡  Maneja excepciones y conexiones

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

49
3.4)Utilización de JDBC con Spring.
l  Ejemplo: Heredando de JdbcDaoSupport

l  Ejemplo: Instanciando JDBCTemplate

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

50
3.4)Utilización de JDBC con Spring.
l  Para que Spring puede completar los datos de nuestros objetos del modelo,
debemos implementar ParameterizedRowMapper

l  E implementar mapRow:

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

51
3.4)Utilización de JDBC con Spring.
l  Documentación de JDBCTemplate

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

52
3.4)Utilización de JDBC con Spring.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

53
3.4)Utilización de JDBC con Spring.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

54
Capitulo 4: Programación Orientada a
Aspectos AOP
l  AOP paradigma de programación que intenta permitir una adecuada
modularización de las aplicaciones y posibilitar una mejor separación de
conceptos, intenta dar un servicio horizontal, por ejemplo :en vez de hacer
llamadas de log en todos los métodos porqué no se centraliza todo en una
sola funcionalidad.
l  AOP nos ayuda a modificar dinámicamente nuestro modelo estático para
incluir el código requerido para cumplir los requerimientos secundarios sin
tener que modificar el modelo estático original (de echo, ni siquiera
necesitaremos tener el código original). Mejor aún, normalmente podremos
tener este código adicional en una única localización en vez de tenerlo
repartido por el modelo existente, como haríamos si estuviéramos usando
sólo OO.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

55
Algunas definiciones
l  Aspect (Aspecto) es la funcionalidad que se cruza a lo largo de la aplicación (crosscutting) que se va a implementar de forma modular y separada del resto del sistema.
El ejemplo más común y simple de un aspecto es el logging (registro de sucesos)
dentro del sistema, ya que necesariamente afecta a todas las partes del sistema que
generan un suceso.
l  Jointpoint (Punto de Cruce) es un punto de ejecución dentro del sistema donde un
aspecto puede ser conectado, como una llamada a un método, el lanzamiento de
una excepción o la modificación de un campo. El código del aspecto será insertado
en el flujo de ejecución de la aplicación para añadir su funcionalidad.
l  Advice (Consejo) es la implementación del aspecto, es decir, contiene el código que
implementa la nueva funcionalidad. Se insertan en la aplicación en los Puntos de
Cruce.
l  Pointcut (Puntos de Corte) define los Consejos que se aplicarán a cada Punto de
Cruce. Se especifica mediante Expresiones Regulares o mediante patrones de
nombres (de clases, métodos o campos), e incluso dinámicamente en tiempo de
ejecución según el valor de ciertos parámetros.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

56
Tipos de advice
l  Before:
¡  Interfaz org.springframework.aop.MethodBeforeAdvice

l  After Returning
¡  Interfaz org.springframework.aop.AfterReturningAdvice

l  Around
¡  Interfaz org.aopalliance.intercept.MethodInterceptor

l  After Throwing
¡  Interfaz org.springframework.aop.AfterThrowing

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

57
Tipos de advice
l  Around advice: también conocido como método interceptor, recibe
el control tanto antes como después del punto de ejecución (o joint
point)
l  Before advice, recibe el control antes de la ejecución del joint point
l  After advice, despues del punto de ejecución
l  Throws advice, después del punto de ejecución, si hay excepción

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

58
Ejemplo After

Returning

l  Diagrama de secuencia:
Inicio
(LoginAOP)

proxy

getUsuarios

Advice
(EjemploAfterReturn)

Destino
(UsuarioService)

getUsuarios

El proxy lo crea la factoría de Spring. El objeto proxy es referenciado por el interfaz que referencia
el objeto destino: IUsuariosService
Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

59
Ejemplo After

Returning

l  El diagrama de secuencia muestra lo siguiente:
1. 
2. 
3. 
4. 

El cliente llama al proxy.
El proxy es creado por una factoria de Spring AOP.
El proxy delega la llamada el objeto destino (target object).
Hasta aquí no se ha producido ningún cambio desde el punto de vista del
comortamiento, el proxy Spring se ha convertido en el intermediario que delega
el comportamiento en el objeto destino. A partir de aquí si que hay un cambio en
el comportamiento: al terminar la llamada al método getUsuarios del objeto
destino, el proxy invoca a EjemploAfterReturn.afterReturning().

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

60
Ejemplo After

Returning

l  1. Implementación del ADVICE
l  2. Definición del Advice en ApplicationContext
l  3. Definición del PointCut
l  4. Implementaciones de la intercepción de metodos
l  5. Definir el bean que utilizará el proxy
l  6. Prueba de ejecución

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

61
Ejemplo After

Returning
1. Implementación del ADVICE
l  Clase que interceptará la ejecución.
¡  Se implementa AfterReturningAdvice para realizar operaciones después de la
ejecución del método.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

62
Ejemplo After

Returning

l  El método afterReturning recibe como argumentos:
1. El objeto que retorna el método del objeto destino
2. El método del objeto destino (getUsuarios )
3. Los argumentos enviados al método del objeto
destino (los recursos de nuestro ejemplo)
4. El objeto destino (el bean UsuarioService)

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

63
2.

Ejemplo After Returning
Definición del Advice en ApplicationContext

l  Como cualquier bean

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

64
Ejemplo After Returning
3. Definición del PointCut
l  El Point Cut o punto de corte, define un patrón para el que se aplicará un
Advice.

l  Más patrones:
¡  .*.get.*
¡  .*.set.*

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

65
4.

Ejemplo After Returning
Implementaciones de la intercepción de
metodos

l  ProxyFactory.

¡  Con una factoria de proxys conseguimos tomar el control absoluto sobre los
pointcuts y los advices que deben ser aplicados y su orden. La forma básica de
crear un proxy AOP en Spring es utilizar
org.springframework.aop.framework.ProxyFactoryBean

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

66
5.

Ejemplo After Returning
Definir el bean que utilizará el proxy

l  LoginAction de Struts tiene definida una propiedad y tras la ejecución de
cualquiera de sus métodos de ejecutará el código del advice.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

67
Ejemplo After

Returning
6. Prueba de ejecución
l  Ejecutamos “/loginAOP”:

l  Salida por consola:
Estamos en es.curso.videospring.service.aop.EjemploAfteReturn. En afterReturning()
Target: es.curso.videospring.service.impl.UsuariosServiceImp
Argumentos: j(java.lang.String) o(java.lang.String)
Método: getUsuarios
Retorna: es.curso.videospring.capadepersistencia.vo.Usuario :idusuario='1',
nombre='JAVI', apellidos='OLIVER', usuario='j', clave='o', mail='null', teléfono='null'

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

68
Más tipos de Advice
l  Antes y después de la ejecución del método.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

69
Capitulo 5: TRANSACCIONES
l Una de las mayores ventajas que ofrece Spring
es el manejo declarativo de transacciones, con
las siguientes ventajas:
¡ Posee un modelo consistente ,integrable con
todos los API’S de persistencia,
JDBC,Hibernate,Ibatis..
¡ Sencillo de usar
¡ Soporte para el manejo declarativo de
transacciones

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

70
TRANSACCIONES
l  Para asegurar la integridad de la base de datos,esta
debe asegurar:
¡ Atomicidad
¡ Aislamiento
¡ Consistencia
¡ Durabilidad

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

71
TRANSACCIONES
l  Tipos de Lectura
¡ Lectura sucia
¡ Lectura no repetible
¡ Lectura fantasma
l Según estos tres tipos de lectura , las
transacciones intenta dar unos niveles de
restricción o aislamiento.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

72
TRANSACCIONES
l  Niveles de aislamiento de Spring
¡ DEFAULT
¡ SERIALIZABLE
¡ REPETIBLE-READ
¡ READ-COMMITED
¡ READ-UNCOMMITED

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

73
TRANSACCIONES
l  La transaccionalidad en Spring esta basada en AOP.
Para ello nos dispone del interceptor
org.springframework.transaction.interceptor.TransactionProxyFactoryBean

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

74
TRANSACCIONES
l  Tres son las propiedades que necesita TransactionProxyFactoryBean:
l  transactionAttributes:
¡  Demarca los límites de la transacción: define que métodos son transaccionales
¡  Define como colabora con otras posibles transacciones anidadas.
l  Por ejemplo, los casos mas típicos para consultas de acción:
•  PROPAGATION_REQUIRED indica que, si no hay una transacción
iniciada, inicia una.
•  PROPAGATION_REQUIRES_NEW crea una transacción nueva, con
independencia de que ya existiera una.
l  Los casos mas típicos para las consultas de selección son:
•  PROPAGATION_SUPPORTS se asocia a una transacción si existe.
En caso contrario se ejecuta sin transacción.
•  PROPAGATION_NEVER. Nunca se ejecuta transaccionalmente. Si
existiera una, produciría una excepción.
¡  Define el nivel de aislamiento de los datos de la transacción respecto de otros
usuarios.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

75
TRANSACCIONES
l  target: Es el bean sobre el cual se quiere controlar su transaccionalidad.
Típicamente estos serán instancias DAO o servicios. Es necesario que
esten definidos dentro del contenedor para que puedan ser referenciados.
l  transactionManager: Manejador de transacciones. Es posible cambiar el
manejador de Transacciones de local a global, sin mas que cambiar la
configuración de Spring.

Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es

76

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
Herencia en C++
Herencia en C++Herencia en C++
Herencia en C++joel1386
 
Mongoose and MongoDB 101
Mongoose and MongoDB 101Mongoose and MongoDB 101
Mongoose and MongoDB 101Will Button
 
Sharing Data Between Angular Components
Sharing Data Between Angular ComponentsSharing Data Between Angular Components
Sharing Data Between Angular ComponentsSquash Apps Pvt Ltd
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソースEnpel
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定Enpel
 
What is Dependency Injection in Spring Boot | Edureka
What is Dependency Injection in Spring Boot | EdurekaWhat is Dependency Injection in Spring Boot | Edureka
What is Dependency Injection in Spring Boot | EdurekaEdureka!
 
Angular Pipes Workshop
Angular Pipes WorkshopAngular Pipes Workshop
Angular Pipes WorkshopNir Kaufman
 
Asp.Net Identity
Asp.Net IdentityAsp.Net Identity
Asp.Net IdentityMarwa Ahmad
 
UDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonUDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonAnder Martinez
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlArjun Thakur
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data BindingDuy Khanh
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)Ander Martinez
 
Powershell Training
Powershell TrainingPowershell Training
Powershell TrainingFahad Noaman
 

Was ist angesagt? (20)

Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Herencia en C++
Herencia en C++Herencia en C++
Herencia en C++
 
Mongoose and MongoDB 101
Mongoose and MongoDB 101Mongoose and MongoDB 101
Mongoose and MongoDB 101
 
Sharing Data Between Angular Components
Sharing Data Between Angular ComponentsSharing Data Between Angular Components
Sharing Data Between Angular Components
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
 
What is Dependency Injection in Spring Boot | Edureka
What is Dependency Injection in Spring Boot | EdurekaWhat is Dependency Injection in Spring Boot | Edureka
What is Dependency Injection in Spring Boot | Edureka
 
Organización de un sitio web
Organización de un sitio webOrganización de un sitio web
Organización de un sitio web
 
Core java course syllabus
Core java course syllabusCore java course syllabus
Core java course syllabus
 
Angular Pipes Workshop
Angular Pipes WorkshopAngular Pipes Workshop
Angular Pipes Workshop
 
Asp.Net Identity
Asp.Net IdentityAsp.Net Identity
Asp.Net Identity
 
Jsf
JsfJsf
Jsf
 
UDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonUDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jackson
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
 
React + Redux for Web Developers
React + Redux for Web DevelopersReact + Redux for Web Developers
React + Redux for Web Developers
 
Dependency injection ppt
Dependency injection pptDependency injection ppt
Dependency injection ppt
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
 
Powershell Training
Powershell TrainingPowershell Training
Powershell Training
 

Andere mochten auch

Andere mochten auch (12)

Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
 
12 dependency injection
12 dependency injection12 dependency injection
12 dependency injection
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframework
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
spring framework
spring frameworkspring framework
spring framework
 
Command-line tools en PHP - deSymfony 2013
Command-line tools en PHP - deSymfony 2013Command-line tools en PHP - deSymfony 2013
Command-line tools en PHP - deSymfony 2013
 
Proceso de Diseño
Proceso de DiseñoProceso de Diseño
Proceso de Diseño
 
Framework spring
Framework springFramework spring
Framework spring
 
Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
 
Dependency Injection in .NET applications
Dependency Injection in .NET applicationsDependency Injection in .NET applications
Dependency Injection in .NET applications
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 

Ähnlich wie Diapositivas Spring Framework- Javier Oliver Fulguera

Ähnlich wie Diapositivas Spring Framework- Javier Oliver Fulguera (20)

Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Introducción a Spring framework
Introducción a Spring frameworkIntroducción a Spring framework
Introducción a Spring framework
 
Tema 4
Tema 4Tema 4
Tema 4
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overview
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
Contenedores de IoC - Autofac
Contenedores de IoC - AutofacContenedores de IoC - Autofac
Contenedores de IoC - Autofac
 
Spring on Flash Platform
Spring on Flash PlatformSpring on Flash Platform
Spring on Flash Platform
 
Springboot Overview
Springboot  OverviewSpringboot  Overview
Springboot Overview
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
React en el mundo real - Daniel Ochoa
React en el mundo real - Daniel OchoaReact en el mundo real - Daniel Ochoa
React en el mundo real - Daniel Ochoa
 
spring
springspring
spring
 
01.springframework.pptx
01.springframework.pptx01.springframework.pptx
01.springframework.pptx
 
Sesion03 apuntes
Sesion03 apuntesSesion03 apuntes
Sesion03 apuntes
 
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
 
Spring tutorial v0.271
Spring tutorial v0.271Spring tutorial v0.271
Spring tutorial v0.271
 
Lab
LabLab
Lab
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Tema 6
Tema 6Tema 6
Tema 6
 
Manual hibernate
Manual hibernateManual hibernate
Manual hibernate
 

Kürzlich hochgeladen

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 

Kürzlich hochgeladen (20)

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 

Diapositivas Spring Framework- Javier Oliver Fulguera

  • 1. FRAMEWORK SPRING 1: INTRODUCCION 2: CONTENEDOR DE SPRING Javier Oliver Fulguera 3: INTEGRACIÓN CON BD. 4: PROGRAMACIÓN ORIENTADA A ASPECTOS AOP 1 @javioliful – www.oliverfulguera.es
  • 2. ÍNDICE CAPITULO 1: INTRODUCCION 1.Introducción 1.1.Arquitectura 1.2.Entorno de desarrollo CAPITULO 2: CONTENEDOR DE SPRING 2.1. INTRODUCCIÓN 2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN 2.3. LA FACTORÍA DE BEANS Y EL CONTEXTO DE LA APLICACIÓN 2.3.1. BeanFactory 2.3.2. ApplicationContext 2.3.2.1. Inicializar el contenedor de Beans 2.3.3. Definición de Bean 2.4 Ejemplo IOC e ID con Struts Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es CAPÍTULO 3-INTEGRACIÓN CON BD. 3.1 Patrón DAO 3.2 Soporte de Spring para JDBC 3.3 DataSource 3.4 Utilización de JDBC con Spring. CAPITULO 4: PROGRAMACIÓN ORIENTADA A ASPECTOS AOP 4.1 Tipos de advice 4.2 Ejemplo After Returning 4.3 Implementación del ADVICE 4.4 Definición del Advice en ApplicationContext 4.5 Definición del PointCut 4.6 Implementaciones de la intercepción de metodos 4.7 Definir el bean que utilizará el proxy 4.8 Prueba de ejecución 2
  • 3. CAPITULO 1: INTRODUCCION l 1.Introducción l 1.1.Arquitectura l 1.2.Entorno de desarrollo Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 3
  • 4. Introducción l  Spring Framework: Define la forma de desarrollar aplicaciones J2EE, dando soporte y simplificando complejidad propia del software corporativo. l  Spring nos facilita la tarea de hacer una aplicación en 3 capas. ¡  Intenta una clara distinción entre las capas de forma que el codigo sea reutilizable, no haya dependencias entre capas. ¡  Codigo más legible. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 4
  • 5. Introducción l  Spring es un framework ligero formada por un conjunto de piezas de diversa índole: tagLibs, MVC, seguridad, transaccionalidad, AOP, JMX, ..., integración con Web Services, RMI, EJBs, Hiberante, Ibatis,.... Sin embargo, su componente principal consiste en un contenedor de Beans que nos permite, mediante Inversión de Control (IoC), acoplar las diversas partes de un aplicativo. l  Un bean, en el contexto de Spring, es un objeto que es creado y manejado por el contenedor Spring. Es importante destacar la diferencia con respecto al uso clásico de 'bean' en J2EE: en Spring el bean no es una clase que cumple una serie de normas o restricciones, sino que es un objeto. l  Toda instancia definida dentro del contenedor de bean es susceptible de: ¡  ser cambiada y/o acoplada, mediante IoC, sin ser intrusivo. ¡  ser sometida a Interceptores AOP. En particular, cabe resaltar la transaccionalidad, lo que hace que Spring tome más relevancia en la capa de Negocio. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 5
  • 6. Introducción l  Ventajas: ¡  Es un contenedor ligero, puede trabajar en Tomcat, no como EJB la otra alternativa, que necesita JBOSS. ¡  No intrusivo puesto que usa IOC, no depende de clases de spring directamente. ¡  Promueve la reutilización de componentes mediante interfaces, mejorando la claridad y cantidad del código, ejemplo la capa DAO, es facilmente intercambiar Hibernate por ibatis. ¡  Gratuito ¡  Fácil de usar. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 6
  • 7. Introducción ¡ Framework vivo, sigue evolucionando. ¡ Se puede usar en cualquier entorno, swing , aplicaciones web… ¡ Ayuda al uso de AOP, entre ellos el manejo declarativo de transacciones. ¡ Integración con la mayoría de frameworks y orms. ¡ Tiene su MVC e incluso da la posibilidad de integrarse con otros. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 7
  • 8. Introducción ¡  Spring propugna ser No intrusivo, es decir, que en el código desarrollado en nuestro aplicativo no aparecen clases de Spring. Esto es cierto al 99%, pues únicamente es necesario usar ApplicationContext para invocar nuestros Bean. ¡  Spring además nos dispone de un conjunto de funcionalidades orientadas a su contenedor: Trasacciones, AOP, seguridad (Acegi) y de un conjunto de utilidades para integrar Velocity, JMX, JNDI, ...., etc. Todas ellas pueden ser usadas de forma no intrusiva, si bien Spring nos plantea una segunda opción intrusiva. ¡  Finalmente, Spring nos dispone de un conjunto de componetes que ya caen en el rango de ser intrusivos: Spring-MVC y Spring-TagLib. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 8
  • 9. Arquitectura Cada módulo se corresponde con unas librerías, solo utilizaremos las que necesitemos, la mayor parte están en spring.jar Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 9
  • 10. ARQUITECTURA 1)  Spring core: Parte esencial de spring, proporciona funcionalidad de inyección de dependencias, como un patrón de acceso a bean , estilo factoría y gestión como un contenedor de bean. 3)  Spring context: Encargado de cargar el archivo de contexto, a través del contenedor de servlet, cargandolo en el web.xml. 4)  Spring DAO: Basado en el patrón de diseño DAO, no es necesario crear una conexión JDBC para cada acceso, hace al código más claro y ayuda a las transacciones. 5)  Spring AOP: Programación orientada a aspectos, ayuda a eliminar código duplicado, un ejemplo sería la ejecución de eventos mientras se ejecuta un método de una clase, su punto fuerte está en el manejo declarativo de transacciones. 6)  Soporte para la integración de ORM (Hibernate, Ibatis…). 7)  Spring web: Proporciona herramientas para la realización de aplicaciones web, entre otras la capacidad de integración con framework que implementan el MVC, struts, jsf.. 8)  Spring MVC: Implementación de su propio MVC Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 10
  • 11. ENTORNO DE DESARROLLO l  l  l  l  l  l  Instalar sdk 1.5 Definir variables JAVA_HOME y Path Descargar IDE: http://www.eclipse.org/europa (wrpp 2.0.1) Instalar el plugin de spring de: http://springide.org/updatesite/ (core y extension) Descargamos las librerías de spring: http://downloads.sourceforge.net/springframework/springframework-2.5.1-with-dependencies.zip l  l  l  l  l  Dist:Librerías del framework de spring. Docs:Documentación. Libs:Librerías ajenas a spring. Samples:Ejemplos. Src:Código fuente. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 11
  • 12. ENTORNO DE DESARROLLO l  l  l  l  l  l  l  l  l  l  l  Configurar plugin de Tomcat. Si vamos a trabajar con struts añadir librerías. Instalar tomcat. Instalar BD. Crear un DynamicWebProject. Añadir naturaleza spring. Modificamos la carpeta donde salen las clases compiladas Importar librerías. Añadir driver de la BD y elementos de struts. Crear web.xml Crear el contexto en Tomcat Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 12
  • 13. CAPITULO2: CONTENEDOR DE SPRING l  l  l  l  l  l  l  l  2.1. INTRODUCCIÓN 2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN 2.3. LA FACTORÍA DE BEANS Y EL CONTEXTO DE LA APLICACIÓN 2.3.1. BeanFactory 2.3.2. ApplicationContext 2.3.2.1. Inicializar el contenedor de Beans 2.3.3. Definición de Bean 2.4 Ejemplo IOC e ID con Struts Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 13
  • 14. 2.1. INTRODUCCIÓN l  En este tema, nos vamos a centrar en los componentes de los dos módulos principales que constituyen el núcleo central de Spring (Spring Core y Spring Context), de los cuales ya realizamos una breve introducción en el primer capítulo. l  Además, haremos especial hincapié en la utilización del patrón de diseño Inversión de Control (IoC), y, más concretamente, Dependencia de Inyección (ID), patrón en el que está basado la lógica de Spring. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 14
  • 15. 2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN l  El concepto de Inversión de Control (IoC) es un patrón de diseño que permite la escritura de un código mucho más limpio y sencillo, facilitando el desacoplamiento entre los componentes de la arquitectura y la definición declarativa (frente a la definición programática) de las relaciones entre ellos. l  El modelo IoC de Dependencia de Inyección se basa en el principio de Hollywood –“No me llames, ya te llamo yo” –. Es decir, las clases de una aplicación no necesitan buscar e instanciar las clases de las que dependen. El control se invierte y es un componente contenedor el que asume la responsabilidad de la definición de dichas dependencias y la gestión de las mismas en tiempo de ejecución. l  La utilización de IoC permite la escritura de código mucho más limpio y sencillo, y facilita el desacoplamiento entre los componentes de la aplicación. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 15
  • 16. 2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN l  l  l  l  l  Controlador que maneja por ti los objetos. Crea por ti los objetos, o sea hace el new por ti. El contenedor resuelve las dependencias por ti. Facilita el desacoplo del código. Desacopla el código Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 16
  • 17. EJEMPLO IOC ¡  Ejemplo: l  En Struts sin usar ioc: l  En Struts con ioc: l  En este último ejemplo no tenemos que instanciar ningun objeto como hacemos en el ejemplo anterior, además spring se encargará de gestionar las dependencias y asegurar la disponibilidad del objeto cuando sea necesario Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 17
  • 18. DEPENDENCIAS DE INYECCION l  Asimismo, Spring nos facilita varios tipos Dependencia de Inyección. A continuación, mostramos los más utilizados: 1)  Inyección de Interfaces. Esta forma de Dependencia de Inyección es poco utilizada por los desarrolladores en Spring. En ella, el contenedor es el encargado de implementar los métodos relativos a esas interfaces en tiempo de ejecución. 2)  Inyección de setter. La Dependencia de Inyección se consigue mediante los métodos setter de los JavaBeans. Es el método más utilizado por los desarrolladores de Spring. 3)  Inyección en el Constructor. La Dependencia de Inyección se produce al pasarle las clases que utiliza como parámetros al constructor. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 18
  • 19. DEPENDENCIAS DE INYECCION l  Inyección en el Constructor l  Definicion del bean Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 19
  • 20. LA FACTORÍA DE BEANS Y EL CONTEXTO DE LA APLICACIÓN l  Spring Core es el módulo principal de Spring (en algunos libros lo podemos encontrar como el núcleo o el corazón de Spring). Por este motivo, debemos entender que este módulo lo componen los elementos esenciales de Spring. Dicho módulo proporciona: 1.  Funcionalidades de Dependencia de Inyección, mediante la implementación del patrón de diseño Inversión de Control, y las de gestión como contenedor de beans. 2.  Un patrón de acceso a beans estilo factoría l  El contenedor es el encargado de gestionar las instancias de las clases configuradas en el framework. l  Spring Context. Este módulo nos proporciona una capa superior al módulo Core, que nos hace mucho más amigable el trabajo. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 20
  • 21. 2.3.1. BeanFactory l  Hay dos maneras mediante las cuales los clientes pueden utilizar las funcionalidades que proporciona el Framework de Spring: ¡  La factoría de beans BeanFactory. Es una representación Java del contenedor de beans utilizado por Spring, la cual aloja la información de todos los beans de Spring y permite al usuario instanciar dichos beans y utilizarlos. ¡  Utilizar el contexto a través del ApplicationContext. Normalmente, los desarrolladores no operan con la clase anterior, sino que la factoría de Beans está encapsulada en el ApplicationContext del módulo Context. El ApplicationContext se encuentra por encima del BeanFactory y hereda de ella todas las funcionalidades de ésta. La factoría de Beans es en realidad quien nos instancia, configura y maneja los beans. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 21
  • 22. Ejemplo de Bean Factory l  Beans.xml Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 22
  • 23. Ejemplo de Bean Factory II l  Una clase cualquiera Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 23
  • 24. 2.3.2. ApplicationContext l  Como ya hemos resaltado en el apartado anterior, ApplicactionContext es una extensión más amigable de BeanFactory. l  El AplicationContext sólo se instancia una vez y es usada por los programadores para: ¡  Obtener las instancias de los beans. ¡  Acceder a mensajes internacionalizados estilo I18N. ¡  Cargar múltiples contextos. l  applicationcontext-seguridad.xml l  applicationcontext-persistencia.xml Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 24
  • 25. 2.3.2.1. Inicializar el Contenedor de Beans 1.  ClassPathXmlApplicationContext. Carga el fichero de contexto desde el classpath de la aplicación Web, es decir, WEB-INF/classes o WEB-INF/ lib. ApplicationContext appContext = new ClassPathXmlApplicationContext("com/prueba/applicationContext.xml"); BeanFactory factory = (BeanFactory) appContext; Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 25
  • 26. 2.3.2.1. Inicializar el Contenedor de Beans l  Cargando el fichero desde cualquier path del servidor String[] paths = {"/WEB-INF/applicationContext*.xml"}; ApplicationContext appContext =New ClassPathXmlApplicationContext(paths); BeanFactory factory = (BeanFactory) appContext; Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 26
  • 27. 2.3.2.1. Inicializar el Contenedor de Beans l  FileSystemXmlApplicationContext. Carga el fichero de contexto desde un fichero del sistema. ApplicationContext appContext = new FileSystemXmlApplicationContext (path); BeanFactory factory = (BeanFactory) appContext; Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 27
  • 28. 2.3.2.1. Inicializar el Contenedor de Beans l  XmlWebApplicationContext. Carga el fichero de contexto inicializado por el ContextLoaderListener. Para cargar el contexto de esta forma, necesitamos configurar un Listener en el fichero web.xml. El Listener inicializaría el contexto de la aplicación al arrancar la instancia del servidor de Aplicaciones. Web.xml <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 28
  • 29. 2.3.2.1. Inicializar el Contenedor de Beans l  Desde el STRUTS-CONFIG-XML. Cargando el pluging de spring <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/> </plug-in> Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 29
  • 30. 2.3.3. Definición de Bean l  Bean: En Spring un Bean es cualquier cosa instanciable. ¡  Un Bean en Spring es susceptible de : l  Ser cambiado y acoplado mediante IOC , sin ser intrusivo. l  Ser sometido AOP, por ejemplo las transacciones. l  No debe cumplir los estándares para los JavaBeans. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 30
  • 31. 2.4.Ejemplo de IOC e ID con Struts ¡  Definición del actión en struts-config.xml ¡  Una vez que en nuestra clase java hemos creado nuestro método set, vamos a definir nuestro bean en el applicationContext.xml ¡  Ahora debemos definir UsuarioService: Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 31
  • 32. 2.4.Ejemplo de IOC e ID con Struts ¡  Y así sucesivamente hasta llegar a la capa de datos Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 32
  • 33. 2.4.Ejemplo de IOC e ID con Struts ¡  Inyección por setter Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 33
  • 34. CAPÍTULO 3-INTEGRACIÓN CON BD. l  l  l  l  3.1)Patrón DAO 3.2)Soporte de Spring para JDBC 3.3)DataSource 3.4)Utilización de JDBC con Spring. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 34
  • 35. 3.1)PATRÓN DAO l  Separa la capa de persistencia de la capa de lógica de negocio, es el más usado por los programadores, aporta: ¡  Reutilización ¡  Claridad Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 35
  • 36. 3.2)SOPORTE DE SPRING PARA JDBC l  Paquetes que nos ofrece Spring para trabajar con JDBC: ¡ org.springframework.jdbc.core ¡ org.springframework.jdbc.datasource ¡ org.springframework.jdbc.object ¡ org.springframework.jdbc.support Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 36
  • 37. 3.2)SOPORTE DE SPRING PARA JDBC l  org.springframework.jdbc.core. Son las clases centrales de Spring JDBC. Éstas son: ¡  • JdbcTemplate ¡  • JdbcDaoSupport En los apartados finales de este tema mostraremos en qué se basan y cuál es su empleo. l  org.springframework.jdbc.datasource. Contiene tanto un conjunto de clases que nos facilitarán el acceso a los datasource, como implementaciones básicas de datasource. l  org.springframework.jdbc.object. Son las clases que nos proporcionan el soporte para realizar consultas sobre la base de datos, operaciones de modificaciones y ejecución de procedimientos almacenados. l  org.springframework.jdbc.support. Se encarga del tratamiento de las excepciones de tipo SQLException y proporciona soporte para las clases de los paquetes jdbc.core y jdbc.object. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 37
  • 38. 3.3) DataSource l  Un DataSource es una interfaz que se encuentra en el paquete javax.sql.DataSource de J2SDK, la cual se emplea como factoría de objetos Connection. l  Gracias al empleo de un objeto DataSource, nos ahorraremos mucho tiempo y esfuerzo, y controlaremos mejor los posibles errores que se producen al dar de alta una conexión. l  Un objeto que usa DataSource puede registrarse por ejemplo: ¡  JNDI ¡  Struts ¡  Spring l  Mediante programación l  Configurara el DataSource en el fichero de configuración. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 38
  • 39. 3.3) DataSource l  Por JNDI. ¡  JNDI es un estándar J2EE para acceder y nominar directorios. Spring nos proporciona unaclase org.springframework.jndi.JndiObjectFactoryBean que nos da soporte a esta tecnología. Es ampliamente utilizado en aplicaciones comerciales. <bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="jdbc/userDB" /> </bean> Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 39
  • 40. 3.3) DataSource l  Con Struts ¡  Otra alternativa que proporciona Spring, es la configuración de un DataSource fuera del contenedor de J2EE, utilizando la clase org.apache.commons.dbcp.BasicDataSource, que pertenece al proyecto Apache's Jakarta Commons DBCP. Mediante esta clase, podremos establecer algunas propiedades adicionales: <!-- ============= Pool de Conexiones ============== --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroymethod=" close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/libreria</value> </property> <property name="username"> <value>root</value> </property> Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 40
  • 41. 3.3) DataSource l  Usando una clase ¡  Programando una clase, en la cual utilizaremos un objeto de la clase BasicDataSource, que no es más que una clase que implementa la interfaz DataSource, y le añadimos los parámetros necesarios, como se muestra a continuación: BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/libreria"); ds.setUsername("root"); ds.setPassword(""); Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 41
  • 42. 3.3) DataSource l  Utilizando Spring Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 42
  • 43. 3.3) DataSource l  Con un fichero de propietades 1.  Registrar el fichero Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 43
  • 44. 3.3) DataSource 2)  Creando el fichero: dao.properties Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 44
  • 45. 3.3) DataSource 3)  Utilizando el fichero Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 45
  • 46. 3.4)Utilización de JDBC con Spring. l  Una vez configurado el DataSource, estudiaremos cómo Spring utiliza el patrón DAO para trabajar con la capa de persistencia. 1.  Definimos una interfaz con todos los métodos de acceso a BD. 2.  Definimos una clase que implemente dicha interfaz. 3.  Definición del Bean en el archivo de contexto. l  Comenzaremos por observar un fragmento del fichero aplicacióncontext.xml en el cual se define un bean para la capa DAO utilizando Spring: Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 46
  • 47. 3.4)Utilización de JDBC con Spring. l  Usando JDBC como lo conocíamos hasta ahora. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 47
  • 48. 3.4)Utilización de JDBC con Spring. l  Utilizando las clases de Spring para trabajar con JDBC l  JDBCTemplate ¡  Constructores l  JdbcTemplate j=new JdbcTemplate(); l  JdbcTemplate j=new JdbcTemplate(DataSource ds); l  JdbcTemplate j=new JdbcTemplate(DataSource ds, boolean lazyInit); ¡  Operaciones de consulta l  int queryForInt(String sql); l  int queryForInt(String sql, Object [] args); l  long queryForLong(String sql); l  long queryForLong(String sql, Object [] args); l  Object queryForObject(String sql,Class requiredType); l  Object queryForObject(String sql,Class requiredType,Object [] args); l  List queryForList(String sql); l  List queryForList(String sql,Object [] args); l  List queryForList(String sql,ParameterizedRowMapper m); l  int update(String sql); l  int update(String sql, Object [] args); Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 48
  • 49. 3.4)Utilización de JDBC con Spring. l JdbcDaoSupport ¡  No es necesario obtener el DataSource y crear un JdbcTemplate, nos ofrece ya un getJdbcTemplate(). ¡  Maneja excepciones y conexiones Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 49
  • 50. 3.4)Utilización de JDBC con Spring. l  Ejemplo: Heredando de JdbcDaoSupport l  Ejemplo: Instanciando JDBCTemplate Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 50
  • 51. 3.4)Utilización de JDBC con Spring. l  Para que Spring puede completar los datos de nuestros objetos del modelo, debemos implementar ParameterizedRowMapper l  E implementar mapRow: Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 51
  • 52. 3.4)Utilización de JDBC con Spring. l  Documentación de JDBCTemplate Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 52
  • 53. 3.4)Utilización de JDBC con Spring. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 53
  • 54. 3.4)Utilización de JDBC con Spring. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 54
  • 55. Capitulo 4: Programación Orientada a Aspectos AOP l  AOP paradigma de programación que intenta permitir una adecuada modularización de las aplicaciones y posibilitar una mejor separación de conceptos, intenta dar un servicio horizontal, por ejemplo :en vez de hacer llamadas de log en todos los métodos porqué no se centraliza todo en una sola funcionalidad. l  AOP nos ayuda a modificar dinámicamente nuestro modelo estático para incluir el código requerido para cumplir los requerimientos secundarios sin tener que modificar el modelo estático original (de echo, ni siquiera necesitaremos tener el código original). Mejor aún, normalmente podremos tener este código adicional en una única localización en vez de tenerlo repartido por el modelo existente, como haríamos si estuviéramos usando sólo OO. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 55
  • 56. Algunas definiciones l  Aspect (Aspecto) es la funcionalidad que se cruza a lo largo de la aplicación (crosscutting) que se va a implementar de forma modular y separada del resto del sistema. El ejemplo más común y simple de un aspecto es el logging (registro de sucesos) dentro del sistema, ya que necesariamente afecta a todas las partes del sistema que generan un suceso. l  Jointpoint (Punto de Cruce) es un punto de ejecución dentro del sistema donde un aspecto puede ser conectado, como una llamada a un método, el lanzamiento de una excepción o la modificación de un campo. El código del aspecto será insertado en el flujo de ejecución de la aplicación para añadir su funcionalidad. l  Advice (Consejo) es la implementación del aspecto, es decir, contiene el código que implementa la nueva funcionalidad. Se insertan en la aplicación en los Puntos de Cruce. l  Pointcut (Puntos de Corte) define los Consejos que se aplicarán a cada Punto de Cruce. Se especifica mediante Expresiones Regulares o mediante patrones de nombres (de clases, métodos o campos), e incluso dinámicamente en tiempo de ejecución según el valor de ciertos parámetros. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 56
  • 57. Tipos de advice l  Before: ¡  Interfaz org.springframework.aop.MethodBeforeAdvice l  After Returning ¡  Interfaz org.springframework.aop.AfterReturningAdvice l  Around ¡  Interfaz org.aopalliance.intercept.MethodInterceptor l  After Throwing ¡  Interfaz org.springframework.aop.AfterThrowing Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 57
  • 58. Tipos de advice l  Around advice: también conocido como método interceptor, recibe el control tanto antes como después del punto de ejecución (o joint point) l  Before advice, recibe el control antes de la ejecución del joint point l  After advice, despues del punto de ejecución l  Throws advice, después del punto de ejecución, si hay excepción Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 58
  • 59. Ejemplo After Returning l  Diagrama de secuencia: Inicio (LoginAOP) proxy getUsuarios Advice (EjemploAfterReturn) Destino (UsuarioService) getUsuarios El proxy lo crea la factoría de Spring. El objeto proxy es referenciado por el interfaz que referencia el objeto destino: IUsuariosService Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 59
  • 60. Ejemplo After Returning l  El diagrama de secuencia muestra lo siguiente: 1.  2.  3.  4.  El cliente llama al proxy. El proxy es creado por una factoria de Spring AOP. El proxy delega la llamada el objeto destino (target object). Hasta aquí no se ha producido ningún cambio desde el punto de vista del comortamiento, el proxy Spring se ha convertido en el intermediario que delega el comportamiento en el objeto destino. A partir de aquí si que hay un cambio en el comportamiento: al terminar la llamada al método getUsuarios del objeto destino, el proxy invoca a EjemploAfterReturn.afterReturning(). Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 60
  • 61. Ejemplo After Returning l  1. Implementación del ADVICE l  2. Definición del Advice en ApplicationContext l  3. Definición del PointCut l  4. Implementaciones de la intercepción de metodos l  5. Definir el bean que utilizará el proxy l  6. Prueba de ejecución Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 61
  • 62. Ejemplo After Returning 1. Implementación del ADVICE l  Clase que interceptará la ejecución. ¡  Se implementa AfterReturningAdvice para realizar operaciones después de la ejecución del método. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 62
  • 63. Ejemplo After Returning l  El método afterReturning recibe como argumentos: 1. El objeto que retorna el método del objeto destino 2. El método del objeto destino (getUsuarios ) 3. Los argumentos enviados al método del objeto destino (los recursos de nuestro ejemplo) 4. El objeto destino (el bean UsuarioService) Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 63
  • 64. 2. Ejemplo After Returning Definición del Advice en ApplicationContext l  Como cualquier bean Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 64
  • 65. Ejemplo After Returning 3. Definición del PointCut l  El Point Cut o punto de corte, define un patrón para el que se aplicará un Advice. l  Más patrones: ¡  .*.get.* ¡  .*.set.* Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 65
  • 66. 4. Ejemplo After Returning Implementaciones de la intercepción de metodos l  ProxyFactory. ¡  Con una factoria de proxys conseguimos tomar el control absoluto sobre los pointcuts y los advices que deben ser aplicados y su orden. La forma básica de crear un proxy AOP en Spring es utilizar org.springframework.aop.framework.ProxyFactoryBean Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 66
  • 67. 5. Ejemplo After Returning Definir el bean que utilizará el proxy l  LoginAction de Struts tiene definida una propiedad y tras la ejecución de cualquiera de sus métodos de ejecutará el código del advice. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 67
  • 68. Ejemplo After Returning 6. Prueba de ejecución l  Ejecutamos “/loginAOP”: l  Salida por consola: Estamos en es.curso.videospring.service.aop.EjemploAfteReturn. En afterReturning() Target: es.curso.videospring.service.impl.UsuariosServiceImp Argumentos: j(java.lang.String) o(java.lang.String) Método: getUsuarios Retorna: es.curso.videospring.capadepersistencia.vo.Usuario :idusuario='1', nombre='JAVI', apellidos='OLIVER', usuario='j', clave='o', mail='null', teléfono='null' Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 68
  • 69. Más tipos de Advice l  Antes y después de la ejecución del método. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 69
  • 70. Capitulo 5: TRANSACCIONES l Una de las mayores ventajas que ofrece Spring es el manejo declarativo de transacciones, con las siguientes ventajas: ¡ Posee un modelo consistente ,integrable con todos los API’S de persistencia, JDBC,Hibernate,Ibatis.. ¡ Sencillo de usar ¡ Soporte para el manejo declarativo de transacciones Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 70
  • 71. TRANSACCIONES l  Para asegurar la integridad de la base de datos,esta debe asegurar: ¡ Atomicidad ¡ Aislamiento ¡ Consistencia ¡ Durabilidad Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 71
  • 72. TRANSACCIONES l  Tipos de Lectura ¡ Lectura sucia ¡ Lectura no repetible ¡ Lectura fantasma l Según estos tres tipos de lectura , las transacciones intenta dar unos niveles de restricción o aislamiento. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 72
  • 73. TRANSACCIONES l  Niveles de aislamiento de Spring ¡ DEFAULT ¡ SERIALIZABLE ¡ REPETIBLE-READ ¡ READ-COMMITED ¡ READ-UNCOMMITED Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 73
  • 74. TRANSACCIONES l  La transaccionalidad en Spring esta basada en AOP. Para ello nos dispone del interceptor org.springframework.transaction.interceptor.TransactionProxyFactoryBean Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 74
  • 75. TRANSACCIONES l  Tres son las propiedades que necesita TransactionProxyFactoryBean: l  transactionAttributes: ¡  Demarca los límites de la transacción: define que métodos son transaccionales ¡  Define como colabora con otras posibles transacciones anidadas. l  Por ejemplo, los casos mas típicos para consultas de acción: •  PROPAGATION_REQUIRED indica que, si no hay una transacción iniciada, inicia una. •  PROPAGATION_REQUIRES_NEW crea una transacción nueva, con independencia de que ya existiera una. l  Los casos mas típicos para las consultas de selección son: •  PROPAGATION_SUPPORTS se asocia a una transacción si existe. En caso contrario se ejecuta sin transacción. •  PROPAGATION_NEVER. Nunca se ejecuta transaccionalmente. Si existiera una, produciría una excepción. ¡  Define el nivel de aislamiento de los datos de la transacción respecto de otros usuarios. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 75
  • 76. TRANSACCIONES l  target: Es el bean sobre el cual se quiere controlar su transaccionalidad. Típicamente estos serán instancias DAO o servicios. Es necesario que esten definidos dentro del contenedor para que puedan ser referenciados. l  transactionManager: Manejador de transacciones. Es posible cambiar el manejador de Transacciones de local a global, sin mas que cambiar la configuración de Spring. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 76