Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Diapositivas Spring Framework- Javier Oliver Fulguera

3,649 views

Published on

Diapositivas que elaboré para impartir el Master en J2EE. Módulo Spring Framework

CAPITULO 1: INTRODUCCION A SPRING FRAMEWORK
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

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

Published in: Technology
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Diapositivas Spring Framework- Javier Oliver Fulguera

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 19. DEPENDENCIAS DE INYECCION l  Inyección en el Constructor l  Definicion del bean Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 19
  20. 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. 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. 22. Ejemplo de Bean Factory l  Beans.xml Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 22
  23. 23. Ejemplo de Bean Factory II l  Una clase cualquiera Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 23
  24. 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. 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. 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. 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. 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. 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. 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. 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. 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. 33. 2.4.Ejemplo de IOC e ID con Struts ¡  Inyección por setter Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 33
  34. 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. 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. 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. 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. 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. 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. 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. 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. 42. 3.3) DataSource l  Utilizando Spring Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 42
  43. 43. 3.3) DataSource l  Con un fichero de propietades 1.  Registrar el fichero Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 43
  44. 44. 3.3) DataSource 2)  Creando el fichero: dao.properties Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 44
  45. 45. 3.3) DataSource 3)  Utilizando el fichero Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 45
  46. 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. 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. 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. 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. 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. 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. 52. 3.4)Utilización de JDBC con Spring. l  Documentación de JDBCTemplate Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 52
  53. 53. 3.4)Utilización de JDBC con Spring. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 53
  54. 54. 3.4)Utilización de JDBC con Spring. Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 54
  55. 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. 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. 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. 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. 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. 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. 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. 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. 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. 64. 2. Ejemplo After Returning Definición del Advice en ApplicationContext l  Como cualquier bean Javier Oliver Fulguera - @javioliful – www.oliverfulguera.es 64
  65. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×